输出UDP数据包需要哪些东西
1.你需要一个socket、一个WSA;
2.你需要这个socket对应的地址,地址包括IP和端口;
3.你需要一个标准的用于发送的数据
设计RC界面
定义各控件
初始化
初始化WSA,这可以在initial里面完成。
//初始化WSA
WORD wVersion = MAKEWORD(2, 2);
WSAStartup(wVersion, &wsaDATA);
按下连接按钮并发送
//获取变量值
DWORD DIP;
CString CSPort;
IP_E.GetAddress(DIP);
Port_E.GetWindowText(CSPort);
//获取IP的strring值
unsigned char* pip;
pip = (unsigned char*)&DIP;
char ip_addr[16];
sprintf_s(ip_addr, 16, "%u.%u.%u.%u", *(pip + 3), *(pip + 2), * (pip+1), *pip);
CString str;
str = ip_addr;
//初始化socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
MessageBox(str);
//获取port的值
int port_i = _wtoi(CSPort);
if (port_i < 10000)
{
ServerAddr.sin_family = AF_INET;
inet_pton(AF_INET, ip_addr, &ServerAddr.sin_addr);
ServerAddr.sin_port = htons(port_i);
MSG_t msg = { 0 };
msg.type = 1;
int i = 0;
for (i = 0; i <= 98; i++)msg.text[i] = i;
msg.text[99] = ' \0';
if (sendto(sockfd, (char*)&msg, sizeof(msg), 0, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
{
CString erro;
erro.Format(_T("%d"), WSAGetLastError());
MessageBox(erro);
WSACleanup();
}
else
{
state_S.SetWindowText(_T("Connect Success!!!"));
closesocket(sockfd);
WSACleanup();
}
}
else
{
MessageBox(_T("port erro!"));
}