先來簡單回憶一下上一次說到的tcp協議
tcp協議:面向連線、可靠的、流式服務
udp協議:無連線的、不可靠的、資料報服務
會發現udp協議和tcp協議恰好相反,但是既然有了可靠的tcp協議,為什麼又要另外乙個不可靠的udp協議呢???
因為udp有它自己的優點udp協議是無連線方式的協議,它的效率高,速度快,佔資源少,使用起來會更快捷,方便,如一般的聊天軟體。
下面編寫乙個程式設計流程(以tcp協議為例)
伺服器端(server):socket bind listen accept recv/send close
(1)(
建立socket)socket(int domain,int type,int protocol)
domain引數表示告訴系統使用哪個底層協議族。我們現在一般還使用ip v4,所以
domain:: 協議簇 af_inet
type:: 選擇協議 sock_stream(tcp) sock_dgram(udp)
protocol:: 0
示例:
int sockfd = socket(af_inet,sock_tream,0)
(2) (命名socket)bind (int sockfd,const struct sockaddr* my_addr,socklen_t addrlen)
sockfd:相當於檔案描述符
my_addr:將my_addr所指的socket位址分配給未命名的sockfd檔案描述符。指定 ip 位址和埠號,裡面有三部分,地 址簇、埠號、ip位址。
struct sockaddr_in
struct in_addr
(3)(
監聽socket)listen(int sockfd ,int backlog)
backlog:指所有處於半連線狀態和完全連線狀態的socket的上限。典型值為5。
(4)(接收連線)accept
(int sockfd,struct sockaddr *addr, socklen_t *addreln)
返回值: 獲取到的和客戶端連線的檔案描述符
(5)recv/send
recv:(int sockfd ,void *buf, size_t len,int flags)
send(int sockfd ,const void *buf, size_t len,int flags)
(6)(關閉連線)close(int sockfd)
客戶端(client):socket connect recv/send close
這裡不同的就是connect發起連線函式
int connect(int sockfd, struct sockaddr* addr, int addrlen);
addr:: 要連線的伺服器的 ip 位址和埠號。
下面是**顯示:
伺服器端(ser)
客戶端(cli)
Socket 程式設計(TCP)
詳細請參見 點我o o哈!很不錯的一篇文章哈 下面是接收資料和傳送資料的函式 int receive socket fd,char sztext,int len if rc 0 return len cnt sztext rc cnt rc return len int send socket fd...
Socket 程式設計(TCP)
下面是接收資料和傳送資料的函式 cpp view plain copy intreceive socket fd,char sztext,intlen if rc 0 return len cnt sztext rc cnt rc return len int send socket fd,char...
socket程式設計TCP
注意一定要先啟動server,再啟動client,否則client因為無法找到server而丟擲異常 coding utf 8 from socket import serverport 12000 af inet表示底層網路使用的是ipv4,sock stream表示使用的socket型別是tcp...