C 下Socket程式設計

2021-08-08 04:37:39 字數 1718 閱讀 7684

標頭檔案#include

套接字型檔#pragma comment(lib,"ws2_32.lib")

客戶端:

載入套接字型檔

wsadata wsadata;

int err;

err=wsastartup(makeword(2,2),&wsadata);

if(err!=0)

return;

if(lobyte(wsadata.wversion)!=2||hibyte(wsadata.wversion)!=2)

wsacleanup();

return;

建立套接字

socket sockclient=socket(af_inet,sock_stream,0);

sockaddr_in addrserv;

addrserv.sin_addr.s_un.s_addr=inet_addr("192.168.0.110");

addrserv.sin_family=af_inet;

addrserv.sin_port=htons(6000);

int t=connect(sockclient,(sockaddr *)&addrserv,sizeof(sockaddr));

if(t==-1)

return false;

接收資料

char buf[100];

int length=recv(sockclient,buf,100,0);

引數1為接收端套接字,引數2為接收快取區,引數3為接收快取區大小,引數4一般為0

執行流程:recv要等待sockclient的傳送快取中的資料傳送完,recv還要等待協議接收資料完畢,recv函式copy接收快取中的資料到buf中,若接收快取中資料小於等於buf大小,則一次copy完,若接收快取大於buf大小,則要呼叫若干次recv函式才能把接收快取資料copy完。

recv返回copy的位元組數。若協議在傳送sockclient傳送快取中資料的時候出現網路錯誤,recv函式返回socket_error,若recv在copy時出現錯誤,則返回socket_error,若recv在等待協議接收資料時網路中斷了,則返回0.

int nerrcode = wsagetlasterror();   // 獲取錯誤**    

if(wsaenotconn == nerrcode)    

else if(wsaeshutdown == nerrcode)    

else if(wsaetimedout == nerrcode)    

else if(wsaeconnreset == nerrcode)    

傳送資料

char * data="123";

int t=send(sockclient,data,strlen(data),0);

引數1為傳送端套接字,引數2為傳送資料緩衝區,引數3為傳送資料緩衝區大小,引數4一般為0.

執行過程:strlen(data)大於sockclient傳送緩衝區大小的話則返回socket _error,strlen(data)小於等於sockclient傳送緩衝區大小的話,就判斷協議是否在傳送資料,若是就等資料傳送完,若協議未傳送緩衝區中資料或緩衝區為空,則比較len與傳送緩衝區剩餘空間,若strlen(data)大於剩餘空間大小則等待協議把資料傳送完,然後send把資料copy到傳送緩衝區中,出現錯誤返回socket_error.

資料有協議傳送和接受,copy和recv只負責copy資料

Linux下C語言Socket程式設計

socket用中國話將叫做 套接字 是用來進行網路資料傳輸的一種約定或者說是一種.我們通常說的tcp協議和udp協議都是通過socket來進行連線.每一台連線到網際網路的裝置都會有乙個ip位址,ip位址就像乙個 號碼或者說家庭住址,通過ip才可以唯一地定位到我們要進行網路通訊的網路裝置 乙個裝置一般...

WinCE下Socket程式設計

wince下socket程式設計 wince 不支援win32中socket非同步類 那個mfc類忘記啥名字了 在軟體開發中 網路程式設計 是必不可少的基本功了 本文所講的 socket 程式設計也就是網路程式設計中的一種形式 當然你如果想問我什麼叫 socket 很遺憾的是我也不能準確的告訴你!但...

windows 下socket 程式設計

111111windows 下用microsoft visual studio 2005 編寫socket程式 windows 下實現同步socket程式設計,和linux下有許多相同的地方,基本的socket流程完全相同,所有的socket 相關的函式都在 winsock.h 中宣告 還有wind...