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.管道通訊 管道流主...