linux C语言 TCP 多线程 简易聊天室

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux C语言 TCP 多线程 简易聊天室相关的知识,希望对你有一定的参考价值。

只有一个客户端的话,接收发送都没什么问题,但是有第二个客户端参与的话,第一个客户端就不能发送了,但是可以接收,仔细看了下,问题应该在 服务器端的recv函数的第一个参数id,如果用进程做,可以复制数据,有2个客户端就有两个id,但是用线程做,线程之间数据共用,第二个客户端来了之后,第一个id就被第二个id覆盖了,这个问题要怎么解决呢?求指教

参考技术A 你accept得到一个新的连接后,再创建线程(把连接socket传给线程),用这个线程专门接收这个连接的数据,就不会有问题了。追问

你的意思是 每对话一次,客户端都close,然后再不停的connect吗?

追答

和客户端通讯的时候线程就活着,客户端断开了,线程就结束。

没有要客户端主动断掉,但是客户端总有断的时候吧?

如果永远不断,那服务端线程也一直存在。

本回答被提问者和网友采纳
参考技术B 第一个不能发送的原因在与你使用fork产生了第一个新进程后,再次fork产生新进程,但是第二个新进程中的id第一个fork产生的时候并没有,所以第一个是没有办法给第二个来发送消息的,而第二个fork的进程在fork之前就有了第一个fork进程的ID,所以第二个可以给第一个发送信息追问

不是啊,我用线程

以上是关于linux C语言 TCP 多线程 简易聊天室的主要内容,如果未能解决你的问题,请参考以下文章

Linux以下基于TCP多线程聊天室(server)

基于TCP协议的服务器中转简易聊天

Linux下基于TCP协议的群聊系统设计(多线程+select)

Java学习网络编程全总结——TCPUdp多线程IO流Socket简易在线咨询聊天室Java爬虫

C 基于UDP实现一个简易的聊天室

Linux下搭建简易的HTTP服务器完成图片显示