使用套接字将多个程序连接到一个服务器,c

时间:2013-06-06 21:51:59

标签: c sockets

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

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

对于糟糕的英语而言,这是另一回事。

2 个答案:

答案 0 :(得分:1)

客户端

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

服务器侧

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

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

Server

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

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

另请参阅Beej's Guide to Network Programming以及其他选项。

答案 1 :(得分:1)

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