Client
SOCKET m_SockClient;
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(4600);
serverAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
int i = connect(m_SockClient, (sockaddr*)&serverAddr, sizeof(serverAddr));
num = recv(m_SockClient, buffer, 1024, 0);
if (num > 0) {
cout << "Receive form server---" << buffer << endl;
while (true) {
num = 0;
cin >> inBuf;
if (!strcmp(inBuf, "exit"))
{
send(m_SockClient, inBuf, sizeof(inBuf), 0);
return 0;
}
send(m_SockClient, inBuf, sizeof(inBuf), 0);
num = recv(m_SockClient, buffer, 1024, 0);
if (num >= 0)
cout << "Receive form server: " << buffer << endl;
}
}
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<iostream>
#include<cstdlib>
#include<time.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(void)
{
WSADATA wsd;
WSAStartup(MAKEWORD(2, 2), &wsd);
SOCKET m_SockClient;
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(4600);
serverAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
int i = connect(m_SockClient, (sockaddr*)&serverAddr, sizeof(serverAddr));
cout << "Connection status " << i << endl;
char buffer[1024];
char inBuf[1024];
int num;
num = recv(m_SockClient, buffer, 1024, 0);
if (num > 0) {
cout << "Receive form server---" << buffer << endl;
while (true) {
num = 0;
cin >> inBuf;
if (!strcmp(inBuf, "exit"))
{
send(m_SockClient, inBuf, sizeof(inBuf), 0);
return 0;
}
send(m_SockClient, inBuf, sizeof(inBuf), 0);
num = recv(m_SockClient, buffer, 1024, 0);
if (num >= 0)
cout << "Receive form server: " << buffer << endl;
}
}
}
Serve
#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<thread>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
char Ip[20][200] = { '\0' };
int iConnect = 0;
void test_threadpro(void* pParam)
{
std::cout << "a new client connected..." << std::endl;
SOCKET hsock = (SOCKET)pParam;
char buffer[1024];
char sendBuffer[1024];
if (hsock != INVALID_SOCKET)
std::cout << "Start receive information from IP:" << Ip[iConnect] << std::endl << std::endl;
while (true) {
int num = recv(hsock, buffer, 1024, 0);
if (num <= 0) {
std::cout << "Client with IP:" << Ip[iConnect] << " disconnected!" << std::endl;
break;
}
if (num >= 0)
std::cout << "Information from:" << Ip[iConnect] << ":" << buffer << std::endl;
if (!strcmp(buffer, "exit"))
{
std::cout << "Client with IP:" << Ip[iConnect] << " disconnected!" << std::endl;
std::cout << "Server Process Close: " << std::endl;
return;
}
else {
memset(sendBuffer, 0, 1024);
strcpy(sendBuffer, buffer);
strcat(sendBuffer, "完成");
int ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);
std::cout << "The message sent to IP:" << Ip[iConnect] << "is: " << sendBuffer << std::endl;
}
}
return;
};
int main(void)
{
WSADATA wsd;
if (WSAStartup(MAKEWORD(2, 2), &wsd)) {
printf("Initlalization Error!");
return -1;
}
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(4600);
serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int m_SockServer;
m_SockServer = socket(AF_INET, SOCK_STREAM, 0);
int i = bind(m_SockServer, (sockaddr*)&serveraddr, sizeof(serveraddr));
std::cout << "bind:" << i << std::endl;
int iMaxConnect = 20;
char buf[] = "THIS IS SERVER\0";
char WarnBuf[] = "It,is voer Max connect\0";
sockaddr_in serveraddrfrom;
int m_Server[20];
while (true) {
int iLisRet = listen(m_SockServer, 0);
int temp = 0;
int Len = sizeof(serveraddrfrom);
int len = sizeof(serveraddr);
m_Server[iConnect] = accept(m_SockServer, (sockaddr*)&serveraddrfrom, &len);
if (m_Server[iConnect] != INVALID_SOCKET)
{
if (getsockname(m_Server[iConnect], (struct sockaddr*)&serveraddrfrom, &Len) != -1)
{
printf("listen address = %s:%d\n", inet_ntoa(serveraddrfrom.sin_addr), ntohs(serveraddrfrom.sin_port));
printf(Ip[iConnect], "%s", inet_ntoa(serveraddrfrom.sin_addr));
}
else {
printf("getsockname error\n");
exit(0);
}
int ires = send(m_Server[iConnect], buf, sizeof(buf), 0);
std::cout << "accept" << ires << std::endl << std::endl;
iConnect++;
if (iConnect > iMaxConnect) {
int ires = send(m_Server[iConnect], WarnBuf, sizeof(WarnBuf), 0);
}
else {
std::thread th1(test_threadpro, (void*)m_Server[--iConnect]);
th1.detach();
}
}
}
WSACleanup();
}