可以实现双方持续通信了
udp服务器端
#include<stdio.h>
#include<iostream>
#include<WinSock2.h>
#include<Windows.h>
#pragma comment (lib,"WS2_32.lib")
using namespace std;
int main()
{
WSADATA wsaData;
SOCKET RecvSocket;
sockaddr_in recvaddr;
int port = 5150;
char recvcharbuf[128];
int recvcharbuflen = 128;
char sendcharbuf[128];
int sendcharbuflen = 128;
SOCKADDR_IN senderaddr;
int senderaddrsize = sizeof(senderaddr);
if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
cout << "wsastarup error" << endl;
}
cout << "wsastarup successful" << endl;
if ((RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)//看准括号的个数
{
cout << "socket failed" << endl;
return 0;
}
cout << "recvsock socker successful" << endl;
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(port);
recvaddr.sin_addr.S_un.S_addr =INADDR_ANY;
if (bind(RecvSocket, (LPSOCKADDR)&recvaddr, sizeof(recvaddr)) == SOCKET_ERROR)
{
cout << "bind error" << endl;
return 0;
}
/*if (::bind(RecvSocket, (LPSOCKADDR)&recvaddr, sizeof(recvaddr)) == SOCKET_ERROR)
{
printf("Failed bind() \n");
return 0;
}
*/
cout << "bind successful" << endl;
while (true)
{
if ((recvfrom(RecvSocket, recvcharbuf, recvcharbuflen, 0, (SOCKADDR*)&senderaddr, &senderaddrsize)) == SOCKET_ERROR)//recefrom主要最后一个参数,是引用
{
cout << "revcfrom error" << endl;
}
cout << "recv successful:\n" << recvcharbuf << endl;
cout << "输入数据" << endl;
cin >> sendcharbuf;
if ((sendto(RecvSocket, sendcharbuf, sendcharbuflen, 0, (SOCKADDR*)&senderaddr, sizeof(senderaddr))) == SOCKET_ERROR)
{
cout << "send error" << endl;
return 0;
}
cout << "send successful" << endl;
}
closesocket(RecvSocket);
WSACleanup();
return 0;
}
udp客户端
#include<stdio.h>
#include<iostream>
#include<WinSock2.h>
#include<Windows.h>
#pragma comment (lib,"WS2_32.lib")
using namespace std;
int main()
{
WSADATA wsaData;
SOCKADDR_IN senderaddr;
int senderaddrsize = sizeof(senderaddr);
if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
cout << "wsastarup field" << endl;
return 0;
}
cout << "wsastarup successful" << endl;
SOCKET sendsock;
sendsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sendsock == INVALID_SOCKET)
{
cout << "sendsock sock failed" << endl;
return 0;
}
SOCKADDR_IN recvrAddr;
recvrAddr.sin_family = AF_INET;
recvrAddr.sin_port = htons(5150);
recvrAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
char sendbuf[128];
int sendbuflen = 128;
char recvbuf[128];
int recvbuflen = 128;
while (true)
{
cout << "输入数据" << endl;
cin >> sendbuf;
sendto(sendsock, sendbuf, sendbuflen, 0, (SOCKADDR*)&recvrAddr, sizeof(recvrAddr));
cout << "接收数据" << endl;
if ((recvfrom(sendsock, recvbuf, recvbuflen, 0, (SOCKADDR*)&senderaddr, &senderaddrsize)) == SOCKET_ERROR)//recefrom主要最后一个参数,是引用
{
cout << "revcfrom error" << endl;
}
cout << "recv successful:\n" << recvbuf << endl;
}
closesocket(sendsock);
WSACleanup();
return 0;
}