下面改为建立一次连接传送多次数据:
server端
if(listen(sockfd,5)==-1) {
fprintf(stderr,"Listen error:%s\n\a",strerror(errno))
exit(1)
}
while(1) {
sin_size=sizeof(struct sockaddr_in)
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) {
fprintf(stderr,"Accept error:%s\n\a",strerror(errno))
exit(1)
}
fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr))
do{
if((nbytes=read(new_fd,buffer,1024))==-1) {
fprintf(stderr,"Read Error:%s\n",strerror(errno))
exit(1)
}
if(nbytes == 0) /蚂姿/ Client closed.
break
buffer[nbytes]='\0'
printf("Server received %s\n",buffer)
}while(1)
close(new_fd)
}
client端
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) {
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno))
exit(1)
}
do{
buffer[0] = 0
printf("Please input char:\n")
fgets(buffer,1024,stdin)
fflush(stdin)
write(sockfd,buffer,strlen(buffer))
}while(buffer[0] != '\n')
close(sockfd)
这个程序同时只能处理一个客户连接,一般服务器程判链序中,收到连接请求后,会起一个子进程单独一个会话(do...while循环内部分)。
感觉问题出在char buf[MAXSIZE] 怀疑可能由于编译唯山器或其他原因,系统并没有为buf分配内存空间。
导致蔽毕在fgets的时候出现段错误
可以通过malloc分配空间,或者使用 static char buf[MAXSIZE] 的方宏山芹式试一下,看看是不是这个问题。
由于端口异常。根据查询linuxtun为编程使用软件,tcp全称为tcpserver中文名誉御为服务端端口,由于端口异常问题,导致tcp端口庆野岩无法正常运行时先保存好编写的程序,退出或重启设备即脊手可。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)