利用套接字实现UDP 通信 小测
2013-12-18 20:33
113 查看
服务器端(接收端)程序:
1、创建套接字(socket)。
2、将套接字绑定到一个本地地址和端口上(bind)。
3、等待接收数据(recvfrom)。
4、关闭套接字。
用于多IP机器上
比如机器有三个ip ->
192.168.1.1 202.202.202.202 61.1.2.3
如果你serv.sin_addr.s_addr=inet_addr("192.168.1.102"); 然后监听7015端口
这时其他机器只有connect 192.168.1.102:7015才能成功。
connect 202.202.202.202:7015和connect 61.1.2.3:7015都会失败。
如果serv.sin_addr.s_addr=htonl(INADDR_ANY); 的话,无论连接哪个ip都可以连上的。
客户端(发送端)程序:
1、创建套接字(socket)。
2、向服务器发送数据(sendto)。
3、关闭套接字。
接收端开启时:
发送端:
接收端:
1、创建套接字(socket)。
2、将套接字绑定到一个本地地址和端口上(bind)。
3、等待接收数据(recvfrom)。
4、关闭套接字。
#include<WinSock2.h> #include<stdio.h> int main() { //加载套字节库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ return 1; } //创建套字节 SOCKET serv_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); //绑定套字节 SOCKADDR_IN servaddr; servaddr.sin_family = AF_INET; servaddr.sin_port = htons(7015); //端口号 //servaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //主机测试地址 //servaddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.102"); //路由中,主机真实地址 servaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); bind(serv_socket,(SOCKADDR*)&servaddr ,sizeof(servaddr)); //接收信息 char RecvBuf[100]; int BufLen = 100; SOCKADDR_IN SenderAddr; //发送端的地址 int SenderAddrSize = sizeof(SenderAddr); recvfrom(serv_socket, RecvBuf, BufLen, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize); printf("%s :%s\n",RecvBuf,inet_ntoa(SenderAddr.sin_addr)); //----------------------------------------------- // Close the socket when finished receiving datagrams printf("Finished receiving. Closing socket.\n"); closesocket(serv_socket); //----------------------------------------------- // Clean up and exit. printf("Exiting.\n"); WSACleanup(); return true; }关于INADDR_ANY
用于多IP机器上
比如机器有三个ip ->
192.168.1.1 202.202.202.202 61.1.2.3
如果你serv.sin_addr.s_addr=inet_addr("192.168.1.102"); 然后监听7015端口
这时其他机器只有connect 192.168.1.102:7015才能成功。
connect 202.202.202.202:7015和connect 61.1.2.3:7015都会失败。
如果serv.sin_addr.s_addr=htonl(INADDR_ANY); 的话,无论连接哪个ip都可以连上的。
客户端(发送端)程序:
1、创建套接字(socket)。
2、向服务器发送数据(sendto)。
3、关闭套接字。
#include<WinSock2.h> #include<stdio.h> int main() { //加载套字节库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ return 1; } //创建套字节 SOCKET send_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); //发送信息 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.102"); //接收端的服务器地址 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(7015); //服务器的信息 printf("Sending a datagram to the receiver...\n"); sendto(send_socket,"Hello",strlen("Hello")+1,0, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR)); //--------------------------------------------- // When the application is finished sending, close the socket. printf("Finished sending. Closing socket.\n"); closesocket(send_socket); //--------------------------------------------- // Clean up and quit. printf("Exiting.\n"); WSACleanup(); return true; }测试结果:先启动接收端,然后启动发送端
接收端开启时:
发送端:
接收端:
相关文章推荐
- 利用Java实现UDP通信
- Java 利用套接字Socket实现简单的服务器与客户端通信
- 通过套接字(socket)和UDP协议实现网络通信
- 如何利用CAsyncSocket类实现UDP通信?
- Java 利用套接字Socket实现简单的服务器与客户端通信
- 通过套接字(socket)和UDP协议实现网络通信
- 用套接字实现UDP通信
- UDP通信编程------利用CAsyncSock类实现UDP异步通信
- 最简单的实现TCP通信,利用Socket和ServerSocket套接字
- MFC中利用CSocket实现UDP通信
- Java+利用UDP实现简单双机通信
- Qt套接字实现UDP通信
- MFC中利用CSocket实现UDP通信
- 利用套接字实现本地通信
- MFC中利用CSocket实现UDP通信
- 使用UDP套接字实现简单的通信
- 利用套接字实现进程通信一例
- 稳扎稳打Silverlight(54) - 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
- 稳扎稳打Silverlight(54) - 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
- 稳扎稳打Silverlight(54) - 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”