UDP服务器端代码:
#include "stdafx.h" #include <winsock2.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") #define PORT 9000 //对外服务端口 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData={0}; int iResutl = WSAStartup(0x0202,&wsaData); SOCKET sock = socket(AF_INET,SOCK_DGRAM,0); if(sock == INVALID_SOCKET) { cout <<"创建套接字失败!" <<endl; } sockaddr_in sa ={AF_INET}; sa.sin_port = htons(PORT);//开放给外部的端口 sa.sin_addr.s_addr = 0; //本机地址 int n = bind(sock,(sockaddr*)&sa,sizeof(sa)); if(SOCKET_ERROR == n) { cout << "端口绑定失败!"<<endl; } cout << "UDP服务器启动" <<endl; char buff[1000]={0}; sockaddr_in form; int len = sizeof(form); int ret = 0; while(ret =recvfrom(sock,buff,1000,0,(sockaddr*)&form,&len)) { cout << "IP地址来自:" << inet_ntoa(form.sin_addr) <<"端口:"<< htons(form.sin_port) <<endl; cout << buff << endl; memset(buff,0,1000); } return 0; }
UDP客户端代码如下:
#include <winsock2.h> #pragma comment(lib,"ws2_32.lib") #define PORT 8050 //自己的端口 int _tmain(int argc, _TCHAR* argv[]) { //UDP客户端 WSADATA wsaData={0}; int iResult = WSAStartup(0x0202,&wsaData); SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);//UDP协议类型 SOCKADDR_IN sa={AF_INET,htons(PORT)}; int n = bind(sock,(sockaddr*)&sa,sizeof(sa));//绑定端口,可以不填端口 SOCKADDR_IN to={AF_INET}; to.sin_port = htons(9000); //对方端口 to.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //对方IP地址 int a = sendto(sock,"hello",5,0,(sockaddr*)&to,sizeof(to)); }
用MFC类库中的CSocket类写客户端代码如下:
// Client.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include <afxwin.h> #include <afxsock.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //控制台中要加这一句,否则出错 if(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0)) { return FALSE; } AfxSocketInit();//初始化Socket库 CSocket sock; BOOL ret = sock.Create(29081,SOCK_DGRAM); if(!ret) { cout << "Socket创建错误" << WSAGetLastError() <<endl; } char buff[1000]={"hello123"}; sock.SendTo(buff,strlen(buff),9000,_T("127.0.0.1")); getchar(); return 0; }