#include <winsock2.h>
#include <process.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
#include <list>
using namespace std;
std::list<SOCKET> client_list;
char szMsg[0x1000] = "";
int acceptData;
char sendData;
void addchar(char a[], char b[], int n)
{
int j = n;
for (int i = 0; i < strlen(a); i++)
{
b[j] = a[i];
j++;
}
b[j] = '\0';
}
int main()
{
//cout << "1";
// WSADATA为一种数据结构。用来存储被WSAStartup函数调用后返回的Windows Sockets数据
WSADATA wsadata;
// 是为了向操作系统说明我们用的库文件种类
WSAStartup(0x22, &wsadata);
unsigned short sPort = 5678;
int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in saddr;
saddr.sin_addr.s_addr = ADDR_ANY;
saddr.sin_port = htons(sPort);
saddr.sin_family = AF_INET;
bind(sockfd, (const sockaddr*)(&saddr), sizeof(saddr));
listen(sockfd, 3);
cout << "waiting for client to connect, port:5678......" << endl;
//caddr为客户端id
sockaddr_in caddr;
int caddr_len = sizeof(caddr);
int client = accept(sockfd, (sockaddr*)&caddr, &caddr_len);
//pAddr为客户端ip地址,ntohs(caddr.sin_port)为客户端线程?
unsigned char *pAddr = (unsigned char*)&caddr.sin_addr.s_addr;
cout << (int)pAddr[0] << "." << (int)pAddr[1] << "." << (int)pAddr[2] << "." << (int)pAddr[3]
<< ":" << (int)ntohs(caddr.sin_port) << "." << "coming" << endl;
getpeername(client, (sockaddr*)&caddr, &caddr_len); // 获取当前连接的客户端的IP地址和端口号
for (;;)
{
sendData = cin.get();
addchar(&sendData, szMsg, 0);
//发送数据szMsg
cout << szMsg << endl;
send(client, szMsg, strlen(szMsg), 0);
}
while (1);
return 0;
}
TCPプロトコルに基づいてデータを送信するサーバーとしてのC ++
おすすめ
転載: blog.csdn.net/weixin_44612221/article/details/113205656
おすすめ
ランキング