请教如何修改下列 linux TCP程序,使得client程序可以连续向server发送数据

请教如何修改下列 linux TCP程序,使得client程序可以连续向server发送数据,第1张

你的server端建立一次只接收一次数据就关闭,client端也是发掘物孙送一次数据就关闭连接,这样效率比较低,而且对socket资源也比较浪费,当然,如果你不在意socket资源消耗或者有特殊需求的话,一次会话交换一次数据未尝不可。

下面改为建立一次连接传送多次数据:

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端口庆野岩无法正常运行时先保存好编写的程序,退出或重启设备即脊手可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8236206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存