33,311
社区成员
发帖
与我相关
我的任务
分享
// P2P.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <thread>
#include <WinSock2.h>
#pragma comment(lib, "WS2_32")
using namespace std;
WSADATA wsaData;
SOCKET sock;
sockaddr_in myAddr, toAddr, recvAddr;
int addrLen, recvLen;
char sendBuff[100], recvBuff[100];
sockaddr_in setAddr(int af, int port, char* ip)
{
sockaddr_in addr;
addr.sin_family = af;
addr.sin_port = htons(port);
addr.sin_addr.S_un.S_addr = inet_addr(ip);
return addr;
}
sockaddr_in setAddr(int af, int port, ULONG ip)
{
sockaddr_in addr;
addr.sin_family = af;
addr.sin_port = htons(port);
addr.sin_addr.S_un.S_addr = htonl(ip);
return addr;
}
void Send()
{
while (true)
{
cout << "message: ";
cin >> sendBuff;
if (sendBuff != "bye")
{
sendto(sock, sendBuff, sizeof(sendBuff), 0, (sockaddr*)&toAddr, addrLen);
}
else
return;
}
}
void Recv()
{
//while (true)
//{
memset(recvBuff, 0, 100 * sizeof(char));
int rt = recvfrom(sock, recvBuff, sizeof(recvBuff), 0, (sockaddr*)&recvAddr, &recvLen);
if (rt != -1)
{
cout << recvBuff << endl;
if (recvBuff == "bye")
return;
}
else
cout << WSAGetLastError() << endl;
//}
}
int main()
{
WSAStartup(MAKEWORD(2, 2), &wsaData);
sock = socket(AF_INET, SOCK_DGRAM, 0);
addrLen = recvLen = sizeof(sockaddr_in);
myAddr = setAddr(AF_INET, 4567, INADDR_ANY); //设置本机地址
char IP[20];
cout << "IP: ";
cin >> IP;
toAddr = setAddr(AF_INET, 4567, IP); //设置对方地址
bind(sock, (sockaddr*)&myAddr, addrLen); //绑定套接字和本机地址
thread t1(Recv);
t1.detach();
thread t2(Send);
t2.join();
}