//发送端基于传统C API开发
#include <iostream>
#include <WinSock2.h>
using namespace std;
#define mian main
#pragma comment(lib,"ws2_32.lib")
enum { PORT = 0x3512};//与接收端绑定的端口一致
int main()
{
WSADATA wa;
WSAStartup(0x0202, &wa);//初始化DLL
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);//参数一为地址族,SOCK_DGRAM为UDP协议创建SOCKET对象
if (INVALID_SOCKET == sock)//
{
cout << "初始化错误" << endl;
}
sockaddr_in sa = { AF_INET };//系统随机分配端口
int i = sizeof(sa);
if (bind(sock, (sockaddr*)&sa, i))//将socket句柄和地址端口信息绑定
{
cout << "绑定出错" << endl;
}
sockaddr_in sa1 = { AF_INET ,htons(PORT),{127,0,0,1} };//保存接收端的IP和端口信息
char s[256];
int n;
while (1)
{
cin >> s;
sendto(sock, s, strlen(s), 0, (sockaddr*)&sa1, sizeof(sa1));//向端口信息为(sockaddr*)&sa1的目的发送消息
}
return 0;
}
//MFC封装的socket类,接收端,可以同事由多个
#include <afxsock.h>
#include <iostream>
using namespace std;
enum { PORT = 0x3512 };//发送端通过该端口来访问接收端
int main()
{
CSocket sock;
AfxSocketInit();//初始化DLL
if (!sock.Create(PORT, SOCK_DGRAM))//端口一定要让发送端知道
{
cout << WSAGetLastError() << endl;
}
char s[256];
UINT nPort;
CString sIP;
//sockaddr_in sa;
//int len = sizeof(sa);
do
{
int n = sock.ReceiveFrom(s, sizeof(s),sIP,nPort);//用CString接收发送端的IP端口信息
//int n = sock.ReceiveFrom(s, sizeof(s), (SOCKADDR*)&sa, &len);//用sockaddr_in对象接收发送端的IP端口信息
s[n] = 0;
cout << sIP << "-";
cout << nPort << ":";
// cout << inet_ntoa(sa.sin_addr) << "-";//输出IPv4地址字符串
// cout << htons(sa.sin_port) << ":";//将大端换小端输出PORT
cout << s << endl;
} while (*s);
return 0;
}