关于accept()函数

在TCP中,我用accept()函数与客户端建立了连接,并接受了一个套接字,但此后我想用accept与另一个用户建立连接,但不想用closesocket()关闭那个接收到... 在TCP中,我用accept()函数与客户端建立了连接,并接受了一个套接字,但此后我想用accept与另一个用户建立连接,但不想用closesocket()关闭那个接收到的套接字,要怎么做才行!……也就是说我要怎么中断服务端与客户端的一个套接字的连接,而去连接另一个客户端的套接字,并在此后还能使用前一个客户端的套接字!
就是SOCKET sockClient=accept(sockListen,(SOCKADDR*)&addrClient,&len);
我想用sockListen来接受另一个用户的套接字,但又不想关闭套接字sockClient,要怎么办???
急求高手!!!(可有加分)
展开
 我来答
hwd0312
推荐于2016-02-27 · TA获得超过4336个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:169万
展开全部
accept()函数用于一个套接口接受一个连接。accept()是c语言中网络编程的重要的函数,windows系统在#include<winsock.h> ,而linux系统在#include <sys/socket.h>中。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数
sockfd:套接口描述字,该套接口在listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。
实例:
#ifndef UNICODE
#defineUNICODE
#endif
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#pragmacomment(lib,"Ws2_32.lib")
int wmain(void)
{
WSADATAwsaData ;
intiResult=WSAStartup(MAKEWORD(2,2),&wsaData);
if(iResult!=NO_ERROR)
{
wprintf(L "WSAStartupfailedwitherror:%ld\n",iResult);
return 1 ;
}
SOCKETListenSocket ;
ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ListenSocket==INVALID_SOCKET)
{
wprintf(L "socketfailedwitherror:%ld\n",WSAGetLastError());
WSACleanup();
return 1 ;
}
sockaddr_inservice ;
service.sin_family=AF_INET ;
service.sin_addr.s_addr=inet_addr("127.0.0.1");
service.sin_port=htons(27015);
if(bind(ListenSocket,
(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)
{
wprintf(L"bindfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
if(listen(ListenSocket,1)==SOCKET_ERROR)
{
wprintf(L"listenfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
SOCKETAcceptSocket ;
wprintf(L "Waitingforclienttoconnect...\n");
AcceptSocket=accept(ListenSocket,NULL,NULL);
if(AcceptSocket==INVALID_SOCKET)
{
wprintf(L "accept failed with error:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
else
wprintf(L "Clientconnected.\n");
//Nolongerneedserversocket
closesocket(ListenSocket);
WSACleanup();
return 0 ;
}
Hz_2B
2012-12-04
知道答主
回答量:1
采纳率:0%
帮助的人:1559
展开全部
用多线程少年,每accept一个连接请求就创建一个线程去处理这个请求,记得在线程函数里把临时套接字关了,楼上灌水你还选为最佳答案?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
荷华华何0U
2011-04-06
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
客户端调用close()函数关闭socket对象,另客服端一个直接发起连接。因为accept()函数连接成功后,会还回一个新的文件描述符。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式