-3

我需要制作一个服务器和一个客户端来进行简单的聊天。服务器必须有线程来继续监听所有客户端,并且必须将收到的消息发送给每个人。服务器必须有 2 个线程来继续侦听套接字以获取新消息并从键盘读取消息并将其发送到服务器。我的问题是:如何与服务器建立多个连接?我正在考虑使用多个套接字,每个客户端一个,并且客户端会尝试连接每个端口,直到某些工作正常为止,但是如果套接字已经在端口中有连接,它不会给出错误,因为我很难。有人有一些提示吗?我需要使用 TCP。

编辑:我的问题不在服务器上,我的问题在客户端。我所做的(或尝试过,至少,我不确定它是否正确)是让服务器中的 main 创建一个线程来监听套接字。当有连接时,这个线程处理那个套接字,主线程创建另一个线程来处理具有其他端口的其他套接字。问题是:如何在客户端检测到一个端口已经在使用中,我需要在下一个端口的套接字中连接?

对不起英语不好。

4

2 回答 2

1

客户端

从内存中工作,对于 TCP 套接字,客户端只需使用socket()and connect(),指定服务器 IP 地址和端口号。自动为您分配一个connect()本地端口;你不必做任何特别的事情。

服务器端

该问题的第一版似乎正在讨论服务器端问题

当服务器运行时,它使用listen()一个众所周知的套接字(具有一个众所周知的端口号)。然后它进入一个循环,服务器阻塞,accept()为新的传入连接创建一个新的套接字文件描述符,与侦听套接字文件描述符分开。

Server

socket()
   |
bind()
   |
listen()
   |
   +<----+
   |     |
accept() |
   |     |
process  |
   |     |
   +-----+

您可能有一个迭代服务器在处理请求本身后循环,但更多的服务器通常会分叉一个新进程或启动一个新线程来处理接受的连接。

另请参阅Beej 的网络编程指南以及其他选项。

于 2013-06-06T21:58:03.247 回答
1

如果你想编写一个线程化的 TCP 服务器,标准的方法是两个线程来监听连接并接受客户端,然后为每个接受的客户端启动一个新线程。您可以在网上找到多个示例,一些快速的谷歌搜索给了我:http ://www.thegeekstuff.com/2011/12/c-socket-programming/

于 2013-06-06T21:58:52.380 回答