伺服器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 建立服務端,以及服務端怎麼返回資料給客戶端 昨天寫的部落格有個缺陷,就是 客戶端只能 先傳送,後讀取,對於正常情況來說應該是,客戶端讀取和傳送是互相不相干涉的兩個步驟,所以這裡就得使用到多執行緒...