#include <WinSock2.h>
#include <windows.h>
#include <iostream>
#include <string>
#include <process.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
typedef struct _Cifo
{
SOCKET C;
SOCKADDR_IN c_addr;
int len;
}_Cifo;
BOOL g_bRect = 0;
void TheradRecv(void *p)
{
char buf[1025] = { 0 };
string tem_buf;
_Cifo *C = (_Cifo*)p;
int bRect = 0;
while (1)
{
bRect = recvfrom(C->C, buf, 1024, 0, (sockaddr*)(&(C->c_addr)), &(C->len));
if (bRect == SOCKET_ERROR)
{
break;
}
if (bRect == 0)
{
break;
}
else if (bRect > 1024)
{
tem_buf = buf;
memset(buf, 0, 1025);
while ((bRect = recvfrom(C->C, buf, 1024, 0, (sockaddr*)(&(C->c_addr)), &(C->len))) <= 1024)
{
tem_buf += buf;
memset(buf, 0, 1025);
}
cout << endl << tem_buf;
continue;
}
cout << endl << buf;
memset(buf, 0, 1025);
}
//closesocket(C->C);
}
void main()
{
WSADATA wsa;
SOCKET S;
SOCKADDR_IN S_addr;
int bRect;
bRect = WSAStartup(MAKEWORD(2, 2), &wsa);
if (bRect)
{
return;
}
S = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (!S)
{
WSACleanup();
return;
}
S_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
S_addr.sin_family = AF_INET;
S_addr.sin_port = (6000);
// bRect = bind(S, (SOCKADDR*)&S_addr, sizeof(SOCKADDR_IN));
_Cifo C_info;
memset(&C_info, 0, sizeof(C_info));
C_info.C = S;
C_info.c_addr = S_addr;
C_info.len = sizeof(C_info.c_addr);
sendto(S, buf, strlen(buf), 0, (sockaddr*)(&C_info.c_addr), (C_info.len));
_beginthread(TheradRecv, 0, (void*)&C_info);
string str;
while (1)
{
cin >> str;
bRect = sendto(S, str.c_str(), str.length(), 0, (sockaddr*)(&C_info.c_addr), (C_info.len));
if (bRect == SOCKET_ERROR)
{
break;
}
else if (bRect == 0)
break;
}
closesocket(S);
WSACleanup();
system("pause");
}
UDP
最新推荐文章于 2021-12-15 16:06:47 发布
4636

被折叠的 条评论
为什么被折叠?



