基於TCP協議的程序間通訊

2021-10-07 06:05:12 字數 3878 閱讀 3759

tcp協議是應用在傳輸層的協議。是一種面向連線的、可靠的協議。

tcp協議的特點:

1)面向位元組流。

2)tcp是面向連線的運輸層協議

3) 每一條tcp鏈結只能有兩個端點

4)tcp提供可靠交付的服務

5)tcp提供全雙工通訊

根據tcp協議三次握手,server一直處於監聽狀態,等接受到client的請求連線(connect)訊號,accept該連線。

server:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #define _backlog 5

10 void usage(char *_proc)

11 14 int startup(const char *ip,const int port)

15 22     struct sockaddr_in local;

23     local.sin_family = af_inet;

24     local.sin_port = htons(port);

25     local.sin_addr.s_addr = inet_addr(ip);

26     if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) //將ip和埠號繫結

27     

31     if(listen(sock,_backlog)<0) //監聽是否有程序與之建立連線

32     

36     return sock;

37 }

38 void* pthread(void * arg)

39 49         else if(size==0)

50         

54         else

55         

59         printf("client say: %s\n",buf);

60     }

61     close(sock);

62     return null;

63 }

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

66 72     char *ip = ar**[1];

73     int port = atoi(ar**[2]);

74     int listen_sock = startup(ip,port);

75     struct sockaddr_in client;

76     socklen_t len = sizeof(client);

77     while(1)

78     

85         printf("get a client... sock %d,ip: %s,port: %d\n",new_sock,inet_nto    a(client.sin_addr),ntohs(client.sin_port));

86 #ifdef _v1_ //單程序通訊

87         char buf[1024];

88         while(1)

89         

95             else if(size==0)

96             

100             else

101             

105             printf("client say :%s\n",buf);

106         }

107 #elif _v2_ //多程序

108         pid_t pid = fork();

109         if(pid<0)

110         

114         else if(pid == 0)

115         

127                 else if(size==0)

128                 

132                 else

133                 

137                 printf("[ip]:%s say :%s\n",_client,buf);

138             }

139             close(new_sock);

140             exit(0);

141         }

142         else

143         

146 #elif _v3_ //多執行緒

147         pthread_t pid;

148         pthread_create(&pid,null,pthread,(void*)new_sock);

149         pthread_detach(pid);

150 #else

151         printf("default");

152 #endif

153     }

154     return 0;

155 }

client:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 

9 void usage(char *proc)

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

14 20     int sock = socket(af_inet,sock_stream,0);

21     if(sock<0)

22     

26     int port = atoi(ar**[2]);

27     char *ip = ar**[1];

28     struct sockaddr_in remote;

29     remote.sin_family = af_inet;

30     remote.sin_port = htons(port);

31     remote.sin_addr.s_addr = inet_addr(ip);

32 33     int ret = connect(sock,(struct sockaddr*)&remote,sizeof(remote));

34     if(ret<0)

35     

39     char buf[1024];

40     while(1)

41     

47     return 0;

48 }

結果:[fbl@localhost tcp]$ ./tcp_server 192.168.1.106 8080

get a client... sock 4,ip: 192.168.1.106,port: 51708

client say: hello

client say: hi

client say: nihao

client close...

^c[fbl@localhost tcp]$ 

[fbl@localhost tcp]$ ./tcp_client 192.168.1.106 8080

please say: hello

please say: hi

please say: nihao 

please say: ^c

[fbl@localhost tcp]$

基於TCP協議的C S通訊

一 環境 os win10 ide visual studio 2010 二 在同一解決方案下新建兩個win32控制台應用程式,專案名分別是server和client,分別在兩個專案的原始檔下新增server.cpp和client.cpp server.cpp include include inc...

基於TCP協議的WCF通訊

windows communication foundation wcf 是由微軟開發的一系列支援資料通訊的應用程式框架,可以翻譯為windows 通訊開發平台。從以下四個方面對wcf進行介紹 基於tcp協議的wcf通訊主要包含了以下三部分,分別為服務契約 公共介面ihelloservice 宿主程...

基於TCP協議的socket通訊

一 伺服器端 1 建立serversocket,即伺服器端的socket,繫結指定的埠,並偵聽此埠 serversocket server new serversocket 8888 2 呼叫accept 方法,開始偵聽,等待客戶端的連線,在未連線成功之前,處於阻塞狀態,返回的socket,用於與客...