猿问

以下是关于accept()函数的一些问题,麻烦帮忙看看哦!

在TCP中,我用accept()函数与客户端建立了连接,并接受了一个套接字,但此后我想用accept与另一个用户建立连接,但不想用closesocket()关闭那个接收到的套接字,要怎么做才行!……也就是说我要怎么中断服务端与客户端的一个套接字的连接,而去连接另一个客户端的套接字,并在此后还能使用前一个客户端的套接字!
就是SOCKET sockClient=accept(sockListen,(SOCKADDR*)&addrClient,&len);
我想用sockListen来接受另一个用户的套接字,但又不想关闭套接字sockClient,要怎么办?

当年话下
浏览 435回答 2
2回答

慕哥6287543

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 ;}elsewprintf(L "Clientconnected.\n");//Nolongerneedserversocketclosesocket(ListenSocket);WSACleanup();return 0 ;}

PIPIONE

客户端调用close()函数关闭socket对象,另客服端一个直接发起连接。因为accept()函数连接成功后,会还回一个新的文件描述符。
随时随地看视频慕课网APP
我要回答