導航:首頁 > 異常信息 > 網路編程長連接用到的函數

網路編程長連接用到的函數

發布時間:2022-07-17 00:03:55

Ⅰ 關於accept()函數

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

Ⅱ linux系統網路編程主要是學什麼要用到哪些概念和函數最好是舉例說明,要詳細些

多線程和多進程要學。socket套接字要學。TCP/UDP也要學。這些是基本肯定要學的吧,其餘的就不知道你們研究多深了。用到的函數太多了- -!而且函數的參數也多的一筆,很難記的,有幫助手冊了還好。

Ⅲ 如何學習網路編程

具體到編程,用java來實現網路編程是很容易的,可以作為網路編程的入門。使用C++和winsock相對復雜一些。

總之看實際需要了。
你好初學網路編程者可以從以下幾個步驟開展:
1)下載一個可以互動的學習工具,通過這個與這個工具互動,我們可以及時的學到每個api的結果如果。
對於有c/c++或java基礎的朋友通過一兩個禮拜的時間就可以上手了,另外個人建議初學者可以學習dive into python。
2)掌握網路編程中會用到的幾個基本概念和內涵,比如IP地址,port號,socket等
3)記住和消化網路編程C/S模型,把server和client端編程的常用模式理解和消化
4)花幾天時間學習socket api集,api集可以分為下面幾大類:創建 socket bind listen accept收發 read/recv/recvfrom write/send/sendto關閉 close shutdown參數 getsockopt/setsockopt地址 gethostbyaddr getaddrbyhost,...在學習這些api時候,可以先關注在函數功能,參數意義上
5)結合python互動平台,實踐socket api的用法,比如socket函數怎麼使用,bind怎麼使用等等。在互動過程中,我們可以變換參數,看看調用結果如何。比如,創建一個tcp socket的語法如下:socket(AF_INET,SOCK_STREAM)創建一個udp socket的語法如下:socket(AF_INET,SOCK_DGRAM)
6)學習socket server端編程實現簡單規約比如echo,time等,然後通過cmd中的telnet來測試。
7)學習I/O模型,比如阻塞、非阻塞和反應式(select,poll,WaitForMultipleObject)等
8)學習Richard Stevens的《Unix網路編程》,深入學習其中的api原理以及服務端設計原理,並通過代碼編寫。
9)下載高性能網路編程框架twisted,筆者強烈推薦,它將使你的網路編程效率提高10倍以上。
10)學習設計模式、操作系統知識比如線程、進程、同步等。

要想真正掌握計算機技術,並在IT行業里干出一番事業來,有所作為,具有一定的編程能力是一個基本條件和要求。打好基礎學編程要具備一定的基礎,總結之有以下幾方面:
(1)數學基礎 從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。
(2)邏輯思維能力的培養 學程序設計要有一定的邏輯思維能力,「邏思力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。因此在學習編程過程中,我們不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。

有些問題只有通過實踐後才能明白,也只有實踐才能把老師和書上的知識變成自己的,高手都是這樣成材的。

Ⅳ 程序開發中各類有用的函數方法都有哪些

常用的函數方法有很多,比如字元串函數,時間函數,文件函數,下面是列舉的常用方法。
以保護模式調用一個函數。
nargs 和 nresults 的含義與 lu a_call 中的相同。 如果在調用過程中沒有發生錯誤, l ua_pcall 的行為和 l ua_call 完全一致。 但是,如果有錯誤發生的話, lu a_pcall 會捕獲它, 然後把唯一的值(錯誤消息)壓棧,然後返回錯誤碼。 同 lu a_call 一樣, l ua_pcall 總是把函數本身和它的參數從棧上移除。
如果 msgh 是 0 , 返回在棧頂的錯誤消息就和原始錯誤消息完全一致。 否則, msgh 就被當成是 錯誤處理函數 在棧上的索引位置。 (在當前的實現里,這個索引不能是偽索引。) 在發生運行時錯誤時, 這個函數會被調用而參數就是錯誤消息。 錯誤處理函數的返回值將被 lu a_pcall 作為錯誤消息返回在堆棧上。
典型的用法中,錯誤處理函數被用來給錯誤消息加上更多的調試信息, 比如棧跟蹤信息。 這些信息在 lua_pcall 返回後, 由於棧已經展開,所以收集不到了。
lu a_pcall 函數會返回下列常數 (定義在 lu a.h 內)中的一個:
LUA_OK (0): 成功。
LUA_ERRRUN: 運行時錯誤。
LUA_ERRMEM: 內存分配錯誤。對於這種錯,Lua 不會調用錯誤處理函數。
LUA_ERRERR: 在運行錯誤處理函數時發生的錯誤。
LUA_ERRGCMM: 在運行 __gc 元方法時發生的錯誤。 (這個錯誤和被調用的函數無關。)
lu a_pcallk
這個函數的行為和 lua_pcall 完全一致,只不過它還允許被調用的函數讓出 )。
lu a_pop
[-n, +0, –]
void lu a_pop (lua_State *L, int n);
從棧中彈出 n 個元素。
lua_pushboolean
[-0, +1, –]
void l ua_pushboolean (lua_State *L, int b);
把 b 作為一個布爾量壓棧。
lua_pushcclosure
[-n, +1, e]
void l ua_pushcclosure (lu a_State *L, lua_CFunction fn, int n);
把一個新的 C 閉包壓棧。
當創建了一個 C 函數後, 你可以給它關聯一些值, 這就是在創建一個 C 閉包(); 接下來無論函數何時被調用,這些值都可以被這個函數訪問到。 為了將一些值關聯到一個 C 函數上, 首先這些值需要先被壓入堆棧(如果有多個值,第一個先壓)。 接下來調用 lua_pushcclosure 來創建出閉包並把這個 C 函數壓到棧上。 參數 n 告之函數有多少個值需要關聯到函數上。 lua_pushcclosure 也會把這些值從棧上彈出。
n 的最大值是 255 。
當 n 為零時, 這個函數將創建出一個 輕量 C 函數, 它就是一個指向 C 函數的指針。 這種情況下,不可能拋出內存錯誤。
lua_pushcfunction
[-0, +1, –]
void lua_pushcfunction (lua_State *L, lua_CFunction f);
將一個 C 函數壓棧。 這個函數接收一個 C 函數指針, 並將一個類型為 function 的 Lua 值壓棧。 當這個棧頂的值被調用時,將觸發對應的 C 函數。
注冊到 Lua 中的任何函數都必須遵循正確的協議來接收參數和返回值 (lua_CFunction )。

Ⅳ int Receive(SOCKET fd,char *szText,int len)解釋,我剛學C++希望各位老師指導一下。

這是個網路編程的函數,表示在緩沖區中接受數據。
首先你要明白一點,一個函數可以有不止一個參數的,參數個數和類型是根據需要來的。就那這個函數為例:你要接受緩沖區數據,首先要知道是哪一個連接發來的數據,這就需要socket fd為你指明,其次,你讀取了之後,要把這些數據存放在哪,szText就是指明要存放的未知的,這個未知可以你自己制定,最後一個是你要讀取多少,因為內存是連續的,如果你一直讀的話,後面是無意義的亂碼,所以要限定長度。這個長度需要通信雙方協議好的。
其次,要學習C/C++建議你還是找一本教科書,不要太厚的,從基本的概念學起。搞清楚內存怎麼組織的你就學好了。

Ⅵ SOCKET編程中的bind函數的作用

socket編程中的bind()函數把IP地址埠相關信息和套接字相互關聯起來。

使用格式
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,socklen_t *addrlen);

功能描述
當用socket()函數創建套接字以後,套接字在名稱空間(網路地址族)中存在,但沒有任何地址給它賦值。bind()把用addr指定的地址賦值給用文件描述符代表的套接字sockfd。addrlen指定了以addr所指向的地址結構體的位元組長度。一般來說,該操作稱為「給套接字命名」。
通常,在一個SOCK_STREAM套接字接收連接之前,必須通過bind()函數用本地地址為套接字命名。
備註:
調用bind()函數之後,為socket()函數創建的套接字關聯一個相應地址,發送到這個地址的數據可以通過該套接字讀取與使用。
備註:
bind()函數並不是總是需要調用的,只有用戶進程想與一個具體的地址或埠相關聯的時候才需要調用這個函數。如果用戶進程沒有這個需要,那麼程序可以依賴內核的自動的選址機制來完成自動地址選擇,而不需要調用bind()函數,同時也避免不必要的復雜度。在一般情況下,對於伺服器進程問題需要調用bind()函數,對於客戶進程則不需要調用bind()函數。

Ⅶ 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫

需要用到的頭文件包含:

#include <winsock2.h>

#include <windows.h>

與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫

Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:

Winsock 1:

Windows CE平台支持。

頭文件:WinSock.h

庫:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;

頭文件:WinSock2.h

庫:ws2_32.lib

mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll

(7)網路編程長連接用到的函數擴展閱讀

winsock庫的載入與卸載:

載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

載入成功,返回值為0。

WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~

LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。

卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。

Ⅷ 請寫出tcp面向連接通訊需要用到的socket api函數有哪些

tcp和udp都是傳輸協議,只是兩者是有區別的,TCP是一種在不可靠的網路環境中進行可靠的傳輸,一個文件被分成許多數據包從一台主機傳輸到另外一台主機,每接受一個數據包,兩台主機之間都需要驗證的,如果另外一台主機沒有接收到該數據包,該主機

閱讀全文

與網路編程長連接用到的函數相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:527
電腦無法檢測到網路代理 瀏覽:1377
筆記本電腦一天會用多少流量 瀏覽:597
蘋果電腦整機轉移新機 瀏覽:1381
突然無法連接工作網路 瀏覽:1080
聯通網路怎麼設置才好 瀏覽:1230
小區網路電腦怎麼連接路由器 瀏覽:1058
p1108列印機網路共享 瀏覽:1215
怎麼調節台式電腦護眼 瀏覽:720
深圳天虹蘋果電腦 瀏覽:956
網路總是異常斷開 瀏覽:618
中級配置台式電腦 瀏覽:1017
中國網路安全的戰士 瀏覽:638
同志網站在哪裡 瀏覽:1422
版觀看完整完結免費手機在線 瀏覽:1464
怎樣切換默認數據網路設置 瀏覽:1114
肯德基無線網無法訪問網路 瀏覽:1290
光纖貓怎麼連接不上網路 瀏覽:1500
神武3手游網路連接 瀏覽:969
局網列印機網路共享 瀏覽:1005