socket多執行緒通訊(乙個伺服器對多個客戶端)

2021-10-06 07:46:13 字數 3211 閱讀 1780

1.伺服器端

#include

#include

#include

#include

#include

#include

#include

#include

#define port 8888

#define max_num_client 10

struct pthread_data

;void

*server_handle

(void

* arg)

;int client_fds[max_num_client]

;int

main()

//建立socket連線

sock_fd=

socket

(af_inet,sock_stream,0)

;if(sock_fd==-1

)else

//設定server位址結構

bzero

(&serv_addr,

sizeof

(serv_addr));

//初始化結構占用記憶體

serv_addr.sin_family=af_inet;

//設定傳輸層型別ipv4

serv_addr.sin_port=

htons

(port)

;//設定埠號

serv_addr.sin_addr.s_addr=

htons

(inaddr_any)

;//設定伺服器ip位址

bzero(&

(serv_addr.sin_zero),8

);//繫結埠if(

bind

(sock_fd,

(struct sockaddr*

)&serv_addr,

sizeof

(serv_addr))!=

0)else

//監聽埠if(

listen

(sock_fd,max_num_client!=0)

)else

//建立連線客戶端的對應套接字

len=

sizeof

(client_add)

;printf

("listening...\n");

while(1

)else

printf

("client_fds[%d] join in!\n"

,i);

num++;if

(num==max_num_client-1)

break;}

}}}close

(client_fd)

;close

(sock_fd)

;return0;

}//每個執行緒對應乙個客戶端

void

*server_handle

(void

*arg)

}//不斷接收客戶端資訊

while

((n=

recv

(client_fd, recvbuf,

sizeof

(recvbuf),0

))>0)

}for

(i=0

;i)break;}

//向所有客戶端傳送此客戶端發的資訊

sprintf

(sendbuf,

"client_fds[%d]:%s\n"

,num,recvbuf)

;for

(i=0

;i)memset

(recvbuf,0,

sizeof

(recvbuf));

}close

(client_fd)

;pthread_exit(0

);}

2.客戶端

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ehco_port 8888

int sock_fd;

void

*client_handle

(void

*arg)

}int

main()

else

//設定server位址結構

bzero

(&serv_addr,

sizeof

(serv_addr));

//初始化結構占用記憶體

serv_addr.sin_family=af_inet;

//設定傳輸層型別ipv4

serv_addr.sin_port=

htons

(ehco_port)

;//設定埠號

serv_addr.sin_addr.s_addr=

inet_addr

("127.0.0.1");

//設定伺服器ip位址

bzero(&

(serv_addr.sin_zero),8

);//連線服務端if(

-1==connect

(sock_fd,

(struct sockaddr*

)&serv_addr,

sizeof

(serv_addr)))

printf

("success connect to server!\n");

pthread_create

(&thread,

null

, client_handle,

null);

//傳送並接收緩衝的資料

while

((n=

recv

(sock_fd,recv_buff,

1024,0

))>0)

memset

(recv_buff,0,

sizeof

(recv_buff));

}close

(sock_fd)

;return0;

}

有了這個可以在阿里雲伺服器搭個服務端,這樣就可以用不同的客戶端通過伺服器通訊。

socket多執行緒通訊

程序與執行緒的區別 程序 在作業系統構成單獨執行流的單位。執行緒 在程序構成單獨執行流的單位 執行緒的建立和執行流程 include int pthread create pthread t restrict thread,const pthread attr t restrict attr,voi...

乙個簡單的多執行緒socket

碼了2個小時多,終於弄完了。用的編輯器是qt creator 突然發現在qt creator上,也支援這些底層的c語言。在linux上除錯無誤。寫這個,也算是自己讀書的記錄吧!include include include include include include include includ...

多執行緒socket通訊client

控制台下實現多執行緒socket通訊,服務端為每個請求的客戶端建立乙個執行緒,進行通訊。其實這些msdn裡都有 一.基本流程如下 定義變數 獲得winsock版本 載入winsock庫 初始化 建立套接字 設定套接字選項 關閉套接字 解除安裝winsock庫 釋放資源 二.客戶端 建立過程 下篇是服...