本文目錄一覽:
c語言socket編程中accept的阻塞問題
端口就是負責監聽連接請求的.如果監聽到該端口的請求那麼就可以確定是對你這個服務器的請求.一旦這個端口被佔用,那麼其它任何程序都無法再使用這個端口.所以我們要避開系統常用端口,要從1024以上的端口選擇.
在服務器端
sin_port
是不可以被設置為0的,
否則客戶端的確無法連接.
而客戶端可以設置為0,客戶端可以任意端口的,沒有影響.
c語言的返回值是什麼意思啊?
函數返回值的意思是將函數實現的結果返回給調用者。
按標準來說,C的main函數是需要有返回值的。標準中main函數返回類型是int的,所以需要一個返回值。但是由於歷史原因,很多地方可以看到沒有返回值的main。
比如直接main()或者說void main() 但是這樣一般編譯器也不會認為錯誤,不過建議還是寫標準的C的main函數,最好有一個返回值,0表示正常退出。
擴展資料:
需要說明的是:
1、一個C語言源程序可以由一個或多個源文件組成。
2、每個源文件可由一個或多個函數組成。
3、一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。是整個程序的入口。
4、源程序中可以有預處理命令(包括include 命令,ifdef、ifndef命令、define命令),預處理命令通常應放在源文件或源程序的最前面。
5、每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括號「}」之後不能加分號。(結構體、聯合體、枚舉型的聲明的「}」後要加「 ;」。)
6、標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
參考資料來源:百度百科-函數
誰能告訴我accept()函數返回一個新的套接字,所謂新套接字怎麼理解?
誰能告訴我accept()函數返回一個新的套接字,所謂新套接字就是說這個是新產生的套接字,並不是你用來accept的那個監聽的套接字。
accept()函數用於一個套接口接受一個連接。accept()是c語言中網絡編程的重要的函數,windows系統在#includewinsock.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 ;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/246828.html