亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下是關于accept()函數的一些問題,麻煩幫忙看看哦!

以下是關于accept()函數的一些問題,麻煩幫忙看看哦!

當年話下 2021-10-20 17:15:16
在TCP中,我用accept()函數與客戶端建立了連接,并接受了一個套接字,但此后我想用accept與另一個用戶建立連接,但不想用closesocket()關閉那個接收到的套接字,要怎么做才行!……也就是說我要怎么中斷服務端與客戶端的一個套接字的連接,而去連接另一個客戶端的套接字,并在此后還能使用前一個客戶端的套接字!就是SOCKET sockClient=accept(sockListen,(SOCKADDR*)&addrClient,&len);我想用sockListen來接受另一個用戶的套接字,但又不想關閉套接字sockClient,要怎么辦?
查看完整描述

2 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

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 ;
}



查看完整回答
反對 回復 2021-10-24
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

客戶端調用close()函數關閉socket對象,另客服端一個直接發起連接。因為accept()函數連接成功后,會還回一個新的文件描述符。

查看完整回答
反對 回復 2021-10-24
  • 2 回答
  • 0 關注
  • 473 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號