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;
}