主要步驟:
1.載入套接字型檔
2.建立套接字
3.繫結套接字(與埠繫結)
4.傳送或等待接收資料
5.關閉套接字
注意:如果要同時進行收發操作時,收的時候可以按照預設的套接字使用(即接收任意ip傳送的資料),但是傳送時要注意,如果是傳送給指定的ip,需要重新建立套接字的物件,並把指定ip進行賦值,其具體如下:
socket sock0 = socket(af_inet,sock_dgram,0) //如果已經建立了,就可以不要這句,直接拿建立的就行,下面為需要
//修改的部分
sockaddr_in addrnew; //此處物件名字可以隨便改
addrnew.sin_addr.s_un.s_addr = inet_addr("192.168.0.10"); //這裡輸入該ip位址
addrnew.sin_family = af_inet; //這裡是位址族
addrnew.sin_port = htons(6000); //這裡是埠號
如果繫結了就不用再繫結了
此外置收資料時,傳送方的ip位址會儲存在addrnew.sin_addr中,可以用以下的語句,將其轉換為string型別
string ip = inet_ntoa(addrnew.sin_addr);
udp的服務端
#include #include #include using namespace std;
void main()
if( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1)
//建立用於監聽的套接字
socket socksrv = socket(af_inet,sock_dgram,0); //tcp 第二個引數用sock_stream
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr = htonl(inaddr_any);
addrsrv.sin_family = af_inet;
addrsrv.sin_port = htons(6000);
//繫結套接字
bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));
//等待並接受資料
sockaddr_in addrclient;
int len = sizeof(sockaddr);
char recvbuf[100];
recvfrom(socksrv,recvbuf,100,0,(sockaddr*)&addrclient,&len);
cout#include #include void main()
if( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1)
//建立套接字
socket sockclient = socket(af_inet,sock_dgram,0);
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr = inet_addr("192.168.0.102");
addrsrv.sin_family = af_inet;
addrsrv.sin_port = htons(6000);
//傳送資料
sendto(sockclient,"hello",strlen("hello")+1,0,(sockaddr*)&addrsrv,sizeof(sockaddr));
//關閉套接字
closesocket(sockclient);
wsacleanup();
}
基於TCP和UDP網路應用程式的編寫
1 tcp 伺服器端 include include int main 判斷是否我們請求的版本號 if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 建立用於監聽的套接字 第三個引數為0,這樣函式將根據位址格式和套接字類別自動選擇乙個合適的協...
網路程式設計套接字一 UDP網路程式
一 ip位址和埠號 1 ip位址 ip協議有兩個版本,ipv4和ipv6。ip位址是在ip協議中,用來標識網路中不同主機的位址 對於ipv4來說,ip位址是乙個4位元組,32位的整數 我們通常也使用 點分十進位制 的字串表示ip位址,例如 192.168.0.1 用點分割的每乙個數字表示乙個位元組,...
UDP網路程式設計套接字
ip協議有兩個版本,乙個是ipv4,乙個是ipv6。ip位址是在ip協議中,用來標識網路中不同的主機的位址。對於ipv4來說,ip位址是乙個4位元組,32位的整數。在資料報頭部的兩個ip位址,乙個叫源ip位址,乙個叫目的ip位址 埠號port 必須是眾所周知的,並且不能隨意修改 埠號是乙個2個位元組...