64,663
社区成员
发帖
与我相关
我的任务
分享
// client test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
#define PORT 4000
#define IP_ADDRESS "127.0.0.1"
typedef struct info
{
SOCKET t_serverSocket;
sockaddr_in t_serverAddr;
}Info;
DWORD WINAPI ServerThread(LPVOID lpPara)
{
Info* t_info = (Info*)lpPara;
int ret = 0;
char RecvBufferData[MAX_PATH];
char RecvBufWho[MAX_PATH];
while (TRUE)
{
memset(RecvBufferData,0x00,sizeof(RecvBufferData));
ret = recv(t_info->t_serverSocket,RecvBufferData,MAX_PATH,0);
if(ret != 0 && ret != -1)
{
if (ret == 0 || ret == SOCKET_ERROR)
{
printf("%d",ret);
cout<<"failed,exit"<<endl;
break;
}
for (unsigned int i = 0;i < strlen(RecvBufferData);++i)
{
RecvBufferData[i] = toupper(RecvBufferData[i]);
}
memset(RecvBufWho,0x00,sizeof(RecvBufWho));
sprintf_s(RecvBufWho,"%s.%d",inet_ntoa(t_info->t_serverAddr.sin_addr),t_info->t_serverAddr.sin_port);
cout<<"接收到来自"<<RecvBufWho<<"的消息为\n"<<RecvBufferData<< endl;
Sleep(1000);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA WSA;
SOCKET clientSocket,serverSocket;
struct sockaddr_in serverAddr;
int AddrLen = 0;
HANDLE hThread = NULL;
int ret = 0;
char SendBuffer[MAX_PATH];
if (WSAStartup(MAKEWORD(2,2),&WSA) != 0)
{
cout<<"init failed"<<endl;
return -1;
}
clientSocket = socket(AF_INET,SOCK_STREAM,0);
if (clientSocket == INVALID_SOCKET)
{
cout<<"create failed"<<endl;
return -1;
}
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.S_un.S_addr = inet_addr(IP_ADDRESS);
serverAddr.sin_port = htons(PORT);
memset(serverAddr.sin_zero,0x00,8);
AddrLen = sizeof(serverAddr);
ret = connect(clientSocket,(struct sockaddr*)&serverAddr,AddrLen);
if (ret != 0)
{
cout<<"connect failed";
return -1;
}
serverSocket = accept(clientSocket,(struct sockaddr*)&serverAddr,&AddrLen);
cout<<"链接成功"<<endl;
Info t_info;
t_info.t_serverSocket = serverSocket;
t_info.t_serverAddr = serverAddr;
hThread = CreateThread(NULL,0,ServerThread,(LPVOID)&t_info,0,NULL);
if (hThread == NULL)
{
cout<<"create thread failed"<<endl;
}
CloseHandle(hThread);
while (TRUE)
{
cin.getline(SendBuffer,sizeof(SendBuffer));
ret = send(clientSocket,SendBuffer,(int)strlen(SendBuffer),0);
if (ret == SOCKET_ERROR)
{
cout<<"send to error"<<endl;
break;
}
}
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();
return 0;
}
while(TRUE)
{
cin.getline(SendBuffer,sizeof(SendBuffer));
ret = send(clientSocket,SendBuffer,(int)strlen(SendBuffer),0);
printf("%s\n",SendBuffer);
if (ret == SOCKET_ERROR)
{
cout<<"send to error"<<endl;
break;
}
}