C++作服务器基于TCP协议发送数据

#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;
}


猜你喜欢

转载自blog.csdn.net/weixin_44612221/article/details/113205656