【发布时间】:2014-07-29 11:01:32
【问题描述】:
connect() 系统调用需要放在 tcp 服务器的上下文中的什么位置才能同时用作客户端和服务器系统?我需要构建一个 p2p 客户端/服务器系统。服务端进程模板为:create server_socket, bind, listen, loop(accept, fork, send/recv),客户端模板为:create client_socket, connect。我可以这样做吗?
sockfd=socket(AF_INET, SOCK_STREAM, 0);
bind(sockfd, &saddr, sizeof(saddr));
listen(sockfd,5); //listen for connections
connect(sfd,&destaddr,sizeof(destaddr); //send connection request elsewhere
while(1){
newsock=accept(sockfd,NULL,NULL);
if(fork()==0){
close(sockfd);
send/recv;
}
close(newsock);
}
另外,将connect() 放在while 循环中或fork() 之后会不会出错?我对 while 循环和 fork 的解释有点困惑。我的目的是在多台机器上运行相同的程序并相互连接。通过这个实现,当我尝试连接到另一个 p2p 主机(运行相同的客户端/服务器组合)时,我得到一个 connection denied 错误。我可以在哪里放置 connect() 以确保程序既可以连接外部又可以接受传入的连接?
【问题讨论】:
-
你在需要连接的时候使用
connect函数。 -
我不清楚你的问题是什么。显然,您知道如何使用该功能。请澄清问题以使其易于回答。
-
我的问题是当我尝试在多台机器上运行该程序并获得连接被拒绝错误时。另外,我不明白为什么需要一个while循环和一个fork来接受连接。不只是 fork() 可以解决这个问题吗?
标签: c sockets tcp network-programming