TCP IP雙端通訊多執行緒

2021-10-05 13:01:28 字數 1985 閱讀 2877

tcp/ip雙端通訊多執行緒

伺服器**(cpp)

#include #include #include #include #include #include #include #include //atoi()

#include void * recv_msg(void *arg);//接收訊息函式宣告

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

//從命令列獲取埠號

int port = atoi(ar**[1]);

if( port<1025 || port>65535 )//0~1024一般給系統使用,一共可以分配到65535

//1 建立tcp通訊socket

int socket_fd = socket(af_inet, sock_stream, 0);

if(socket_fd == -1)

//2 繫結socket位址

struct sockaddr_in server_addr = ;

server_addr.sin_family = af_inet;//af_inet->ipv4

server_addr.sin_port = htons(port);// server port

server_addr.sin_addr.s_addr = inaddr_any;//server ip (auto set by system)

int ret = bind(socket_fd, (struct sockaddr *) &server_addr, sizeof(server_addr) );

if(ret == -1)

//3 設定監聽佇列,設定為可以同時連線5個客戶端

ret = listen(socket_fd, 5);

if(ret == -1)

printf("server is running!\n");

struct sockaddr_in client_addr = ;//用來存放客戶端的位址資訊

socklen_t len = sizeof(client_addr);

int new_socket_fd = -1;//存放與客戶端的通訊socket

//4 等待客戶端連線

new_socket_fd = accept( socket_fd, (struct sockaddr *)&client_addr, &len);

if(new_socket_fd == -1)

else

//開啟接收執行緒

pthread_t recv_thread;//存放執行緒id recv_msg:執行緒執行的函式,將通訊socket:new_socket_fd傳遞進去

ret = pthread_create(&recv_thread, null, recv_msg, (void*)&new_socket_fd);

if(ret != 0)

while(1)

; scanf("%s", buf);

write(new_socket_fd, buf, sizeof(buf));//傳送訊息

if(strcmp(buf, "exit") == 0 || strcmp(buf, "") == 0)//退出

}//5 關閉通訊socket

close(new_socket_fd);

close(socket_fd);

return 0;}

//接收執行緒所要執行的函式 接收訊息

void * recv_msg(void *arg)

; read(*socket_fd, buf, sizeof(buf));//阻塞,等待接收訊息

printf("receive msg:%s\n", buf);

if(strncmp(buf, "exit", 4) == 0 || strcmp(buf, "") == 0)

}return null;

}

執行緒通訊,多執行緒

多執行緒 thread handler thread處理一些複雜的業務邏輯 耗時的事情 handler在主線程中接收訊息的乙個物件 mhandler.sendmessage msg 傳送乙個訊息物件 mhandler.sendemptymessage what 傳送空訊息,只有what沒有obj m...

多執行緒 執行緒通訊

總結 今天小鹹兒來講解乙個好玩的事,那就是執行緒之間該如何通訊,執行緒通訊之後又會出現什麼問題?先來一張導圖來看看執行緒通訊的分布?疑問 如果想要執行緒按照使用者自定義的順序執行的話,那該如何操作呢?思考 如果能夠讓執行緒等待先執行的執行緒執行完,再執行不就能達到效果了嗎!果然出現問題之後,就會有對...

多執行緒 執行緒通訊

1.使用wait notify方法實現執行緒之間的通訊 1 有其他執行緒呼叫同乙個物件的notify或者notifyall方法 呼叫notify notifyall方法之前 2 被喚醒之後重新獲得物件的鎖 呼叫notify notifyall方法之後 編寫測試 如下 執行結果 2.管道通訊 管道流主...