網路程式設計之socket雙方聊天練習

2021-10-19 18:46:26 字數 2174 閱讀 2700

伺服器demo

#include

#include

#include

#include

#include

#include

#include

#include

intmain

(int argc,

char

** ar**)

;char msg[

1024]=

;struct sockaddr_in s_addr;

struct sockaddr_in c_addr;

memset

(&s_addr,0,

sizeof

(struct sockaddr_in));

memset

(&c_addr,0,

sizeof

(struct sockaddr_in));

if(argc !=3)

s_fd =

socket

(af_inet,sock_stream,0)

;if(s_fd ==-1

)s_addr.sin_family = af_inet;

s_addr.sin_port =

htons

(atoi

(ar**[2]

));inet_aton

(ar**[1]

,&s_addr.sin_addr)

;int ret =

bind

(s_fd,

(struct sockaddr *

)&s_addr,

sizeof

(struct sockaddr_in));

if(ret ==-1

)listen

(s_fd,10)

; }while(1

)else

while(1

)}while(1

)}}return0;

}

客戶端demo:

#include

#include

#include

#include

/* see notes */

#include

#include

#include

#include

intmain

(int argc,

char

** ar**)

;char buf[

1024]=

;struct sockaddr_in c_addr;

memset

(&c_addr,0,

sizeof

(struct sockaddr_in));

c_fd =

socket

(af_inet,sock_stream,0)

;if(c_fd ==-1

)c_addr.sin_family = af_inet;

c_addr.sin_port =

htons

(atoi

(ar**[2]

));inet_aton

(ar**[1]

,&c_addr.sin_addr)

;int ret =

connect

(c_fd,

(struct sockaddr *

)&c_addr,

sizeof

(struct sockaddr_in));

if(ret ==-1

)while(1

)}while(1

)}return0;

}~

執行結果:

這個練習最主要的思考點就是在需要建立另外乙個程序,也是fork其中的乙個功能:在網路程序中,通常使用兩個程序,乙個接受另一使用者的資料,而乙個要負責給對方傳送資料。而接受資料的程序是時時刻刻都要進行,所以程式中,fork完沒有判斷是否是父程序還是子程序,所以一直在等待接受資料,而傳送訊息的行為是要在間歇時間完成,所以先判斷是否為子程序,在子程序中完成。

socket程式設計之點對點聊天程式

p2psrv.c include include include include include include 解決父程序退出,子程序不退出 include include include include define err exit m do while 0 void handler int ...

Socket程式設計之聊天室

1.單執行緒模式 建立服務端 第一步,準備位址和埠 第二步,建立乙個serversocket物件 第三步,等待客戶端連線 最後一步,資料接收和傳送。public class singlethreadserver catch ioexception e public class singlethrea...

網路程式設計之 使用Socket建立聊天室

使用基於tcp協議的socket建立聊天室,昨天我寫的部落格已經介紹了怎麼使用 serversocket 建立服務端,以及服務端怎麼返回資料給客戶端 昨天寫的部落格有個缺陷,就是 客戶端只能 先傳送,後讀取,對於正常情況來說應該是,客戶端讀取和傳送是互相不相干涉的兩個步驟,所以這裡就得使用到多執行緒...