server端在tcp的通訊中,需要做到以下6點:
socket套接字的構造 socket
int
socket
(int domain,
int type,
int protocol)
;
domain:指定通訊域;選擇通訊的協議族。
type:型別,tcp為sock_stream,udp為sock_dgram。
protocol:協議,一般為0,會自動適配通訊域及型別的配置。
在man手冊中是這樣解釋protocol引數的:
協議指定要與套接字一起使用的特定協議。通常只有乙個協議支援給定協議族中的特定套接字型別,在這種情況下,協議可以指定為0。然而,可能存在許多協議,在這種情況下,必須以這種方式指定特定的協議繫結 bind
int
bind
(int sockfd,
const
struct sockaddr *addr, socklen_t addrlen)
;
struct sockaddr_in
;char
*w_buf =
"i get your message.\n"
;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));
// socket
//int socket(int domain, int type, int protocol);
int s_fd =
socket
(af_inet, sock_stream,0)
;// net tcp
if(s_fd ==-1
) s_addr.sin_family = af_inet;
s_addr.sin_port =
htons
(8989);
// 用來將主機位元組順序轉換為網路位元組順序
inet_aton
("192.168.5.20"
,&s_addr.sin_addr)
;// 轉大端
// bind
//int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
bind
(s_fd,
(struct sockaddr *
)&s_addr,
sizeof
(struct sockaddr_in));
// listen
listen
(s_fd,10)
;// accept
int clen =
sizeof
(struct sockaddr_in)
;int c_fd =
accept
(s_fd,
(struct sockaddr *
)&c_addr,
&clen);if
(c_fd ==-1
)printf
("get connect:%s\n"
,inet_ntoa
(c_addr.sin_addr));
// read
n_read =
read
(c_fd,
&r_buf,
128)
;printf
("get msg=%s, %dbytes.\n"
, r_buf, n_read)
;// write
write
(c_fd, w_buf,
strlen
(w_buf));
return0;
}
clent端需要做到一般需要做到以下4點:
socket套接字的構造 socket
連線 connect
int
connect
(int sockfd,
const
struct sockaddr *addr, socklen_t addrlen)
;
傳送 write
接收 read
#include
#include
/* see notes */
#include
//#include
#include
#include
#include
#include
#include
intmain()
;char
*w_buf =
"this is from client."
;struct sockaddr_in c_addr;
memset
(&c_addr,0,
sizeof
(struct sockaddr_in));
// socket
//int socket(int domain, int type, int protocol);
int c_fd =
socket
(af_inet, sock_stream,0)
;// net tcp
if(c_fd ==-1
) c_addr.sin_family = af_inet;
c_addr.sin_port =
htons
(8989);
inet_aton
("192.168.5.20"
,&c_addr.sin_addr)
;// connectif(
connect
(c_fd,
(struct sockaddr *
)&c_addr,
sizeof
(struct sockaddr_in))==
-1)// write
write
(c_fd, w_buf,
strlen
(w_buf));
// read
n_read =
read
(c_fd,
&r_buf,
128)
;printf
("get msg=%s, %dbytes.\n"
, r_buf, n_read)
;return0;
}
socket通訊程式設計
1 socket通訊模型如下 應用程式通過套接字可以進行通訊,可以使用udp協議或者使用tcp協議,當客戶端和伺服器端的協議時相對應的,客戶端使用tcp,那麼伺服器端使用tcp 2 udp協議 把資料打包成資料報,然後直接傳送對應的ip位址,速度快,但是不保證 成功率,並且資料大小有限 tcp協議 ...
C 後台程式設計一 socket通訊
最近要寫一些計算機網路的一些實驗,所以最近寫一些linux平台下的後台程式設計,使用c 語言編寫。沒有了windows下的ide,所以用的是記事本編寫cpp檔案,主要寫了兩個cpp檔案,乙個server,另乙個client,先上 有時間再講解 的意思。include include include ...
網路程式設計 socket程式設計通訊
一直感覺socket這個東西挺神秘的 覺得是大牛級別的才能駕輕就熟。今天碰巧看了一下socket的相關資料,通過socket實現客戶端和服務端的通訊,從實戰中去體驗socket的用處。先給大家上一張圖 這張圖大致就是tcp協議和udp協議的分布範圍,其中,socket負責的是傳輸層之間的通訊 soc...