對於計算機世界來說,每個方法和資料結構都是我們現實生活的乙個投影和體現,希望我對於網路通訊和socket的一些理解能夠給你帶來幫助。
我們如果去寄信,信件寫上位址和你準備寄給誰並把它放到郵筒中(郵局),對方也有個小郵筒用來接收別人發給它的信件,如果對方的位址是你填的位址的話信件就收下,那樣對方才能夠接收得到(對方也就知道了你的位址,也可以給你回信),如果我們只寫了位址,沒寫姓名的話那麼同一家人他們也不知道是給誰得信。
分析:利用socket實現乙個簡單的回聲伺服器
客戶端對伺服器進行連線,並且傳送資料,伺服器接收到了以後反饋給客戶端一些資訊
echo_server.c
#include
#include
#include
#include
#include
#include
#include
#define server_port 666
intmain
(void
)//傳送資訊回去
len =
write
(client_sock, buf, len)
;printf
("finished. len: %d\n"
, len)
;close
(client_sock)
;//關閉交流的通道
}close
(sock)
;return0;
}
echo_client.c
#include
#include
#include
#include
#include
#include
#define server_port 666
#define server_ip "127.0.0.1"
intmain
(int argc,
char
*ar**)
message = ar**[1]
;//ar**[0]就是編譯的檔案:./echo_client "this is test"
printf
("message: %s\n"
, message)
; sockfd =
socket
(af_inet, sock_stream,0)
;memset
(&servaddr,
'\0'
,sizeof
(struct sockaddr_in));
servaddr.sin_family = af_inet;
inet_pton
(af_inet, server_ip,
&servaddr.sin_addr)
; servaddr.sin_port =
htons
(server_port)
;connect
(sockfd,
(struct sockaddr *
)&servaddr,
sizeof
(servaddr));
//建立連線
write
(sockfd, message,
strlen
(message));
n =read
(sockfd, buf,
sizeof
(buf)-1
);if(n>0)
else
printf
("finished.\n");
close
(sockfd)
;return0;
}
執行結果:
總結:對於伺服器端和客戶端方面不同地方在於,伺服器端就相當於對方的郵筒,拿來收信件要繫結位址(不能隨意更改),而客戶端就像是我們寫信只要寫上對方的位址和是誰(埠號)想要對誰進行連線就好不用去繫結位址,當你傳送信件給對方時對方也就可以知道你的位址(可以用乙個socket來儲存住,那樣它就可以根據你的位址對你進行回信)
Socket網路通訊
服務端的程式如下 1.建立乙個伺服器端socket,即serversocket,指定繫結的埠,並監聽此埠8888 serversocket serversocket new serversocket 8888 socket socket null 記錄客戶端的數量 int count 0 syste...
socket網路通訊
read write recv send readv writev recvmsg sendmsg recvfrom sendto include ssize t read int fd,void buf,size t count ssize t write int fd,const void bu...
socket網路通訊《二》
socket網路通訊 本文注意基於socket來分析tcp連線建立過程。先回顧一下tcp連線建立過程 主機a執行的是tcp客戶端程式,主機b執行的是tcp伺服器程式,最初兩端tcp程序處於closed態,a主動開啟連線,對應客戶端connect函式發起連線,b被動接受連線,對應於伺服器listen函...