2011-05-02 60 views
0

好吧,我是套接字编程的新手,我的程序没有像我期望的那样工作。在我看到的有关套接字编程的所有示例中,他们使用accept(),并且假定已建立连接后的所有代码。Socket编程accept()in C

但我的accept()在我启动服务器后立即调用。这是否应该发生?还是服务器应该在执行程序的其余部分之前等待连接?

编辑:哎呀我忘了提及它是一个TCP连接。

+2

请显示您的代码。 – 2011-05-02 02:54:18

+0

你在什么操作系统上? – 2011-05-02 03:54:52

回答

0

我认为这就是你想要的。

http://www.sockets.com/winsock.htm#Accept

WINSOCKET规划中的主要概念是你与阻塞或非阻塞的套接字工作。大多数情况下,如果您使用阻塞套接字,则可以查询套接字接收套件,以查看是否有任何呼叫会导致您阻止正在阻塞的例程。

考虑到使用此UDP数据报协议。另一方面,TCP是一种流媒体协议。因此,关于发送和接收的数据块,思考起来会更容易。

0

对于服务器,您可以:

  • 创建插座 - socket()
  • 将它绑定到一个地址。
  • 你进入一个循环中,你:
    • 监听连接尝试
    • 接受并处理它们

无论你正在做的所有这些步骤,这是不是从你的描述清楚。

有对“他们处理”阶段,这取决于你是否计划有一个单线程单进程处理下一个前处理一个请求,或者您是否计划拥有多个选项的多线程单进程,其中一个线程接受请求并创建其他线程来执行处理(而一个线程等待下一个传入连接),或者是否计划让子进程与子进程分叉处理新请求,同时父进程返回到倾听下一个请求。

0

在开始监听连接后,您应该进入您的验收循环。使用select()来检测未决的客户端连接何时准备好被接受,然后致电accept()接受它。