VC中寫socket通訊的基本流程

2021-09-30 05:03:12 字數 2687 閱讀 7219

socket是一種在linux或者unix下非常流行的網路程式設計方式,這種方式簡單有效,可以很靈活的完成各種複雜的協議控制,個人感覺比使用mfc下的網路相關類庫要來的更舒服一些,因為所有一切都是自己可控的。

但是使用socket程式設計有乙個非常不方便的地方在於,由於在linux下沒有乙個像vc這樣強大的除錯平台,網路通訊過程中的錯誤追蹤就會顯得稍微複雜一些。無奈,只能嘗試在vc下是否可以使用標準的socket函式來完成網路通訊,借助vc強大的除錯工具來達到高效率的編碼目的。

在網上找了一些資料,看來vc下使用標準socket函式也不是很困難,遂將過程記錄,以便後用~~

第一步,使用vc的winsock.h標頭檔案,代替linux下的socket相關的標頭檔案。

第二步,為vc的工程鏈結winsock的庫檔案ws2_32.lib

以上兩步可以通過下面的**實現:

1: #ifdef _win32
2: #include
3:

#pragma comment(lib, "ws2_32.lib")

4:

#else

5: #include
6: #include in.h>
7: #include in.h>
8:

#endif

第三步,在使用任何socket函式之前,首先使用wsastartup函式初始化winsock,在退出應用程式前,使用wsacleanup函式清理winsock。可以使用下面的**實現:

1: word wversionrequested;
2: wsadata wsadata;
3:

int err;

4: wversionrequested = makeword( 1, 1 );
5:

// init winsock before using socket functions

6: err = wsastartup( wversionrequested, &wsadata );
7:

if ( err != 0 )

10:

// check winsock version

11:

if ( lobyte( wsadata.wversion ) != 1 ||

12:     hibyte( wsadata.wversion ) != 1 )
16:
17:

// use socket function here

18:
19:

// clean up winsock before exit

20: wsacleanup();

ok,經過上面的三步處理,就可以在程式中使用標準socket函式完成網路通訊了!

最後給出乙個簡單的範例:

1: #include
2: #include
3:
4: #ifdef _win32
5: #include
6:

#pragma comment(lib, "ws2_32.lib")

7:

#else

8: #include
9: #include in.h>
10: #include in.h>
11:

#endif

12:
13:

int main(int argc, char *ar**)

14:
29:
30:

if ( lobyte( wsadata.wversion ) != 1 ||

31:         hibyte( wsadata.wversion ) != 1 )
35:

#endif

36:
37:     sockclient=socket(af_inet,sock_stream,0);
38:
39:     addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");
40:     addrsrv.sin_family=af_inet;
41:     addrsrv.sin_port=htons(6000);
42:     connect(sockclient,(sockaddr*)&addrsrv,sizeof(sockaddr));
43:     send(sockclient,"hello",strlen("hello")+1,0);
44:     recv(sockclient,recvbuf,50,0);
45:     printf("%s/n",recvbuf);
46:
47: #ifdef _win32
48:     closesocket(sockclient);
49:     wsacleanup();
50:

#endif

51:

return 0;

52: }

Java中Socket通訊的基本方法

建立socket連線到server socket chatsocket new socket 127.0.0.1 5000 建立socket的時候需要用到兩個重要的引數,乙個是ip位址,另外乙個是埠號。ip位址可以理解成網路中特定位置的計算機 伺服器相當於一台連續工作的計算機 埠號對應於計算機中特定...

socket通訊的基本流程

寫在前面 本部落格內容主要為socket通訊的c語言實現,與tcp ip分類下的文章為對應互補內容。由於理論知識已在對應內容中有所介紹,因此本部落格中主要是 實現 include pragma comment lib,wsock32.lib int main int argc,char argv c...

Socket 通訊 基本函式

int socket int domain,int type,int protocol socket 用於建立乙個socket描述符 socket descriptor 它唯一標識乙個socket int bind int sockfd,const struct sockaddr addr,sock...