⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 网络socket编程:Client&Server
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib, "wsock32.lib")

#define SERVPORT 3333	/* 服务器监听端口号 */ 
#define BACKLOG 10		/* 最大同时连接请求数 */ 

void main()
{
	WORD wVersionRequested;
	WSADATA WSAData;

	wVersionRequested = MAKEWORD(1, 1);

	if (0 != WSAStartup(wVersionRequested, &WSAData))
	{
		printf("加载套接字错误!");
		exit(1);
	}

	int sockfd,client_fd;				/* sock_fd:监听socket;client_fd:数据传输socket */ 
	struct sockaddr_in my_addr;			/* 本机地址信息 */
	struct sockaddr_in remote_addr;		/* 客户端地址信息 */

	if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
	{
		printf("创建套接字错误!");
		WSACleanup();
		exit(1);
	}

	my_addr.sin_family=AF_INET;
	my_addr.sin_port=0;//htons(SERVPORT);
	my_addr.sin_addr.s_addr = INADDR_ANY;

	if (SOCKET_ERROR == bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)))
	{
		printf("绑定套接字错误!");
		closesocket(sockfd);
		WSACleanup();
		exit(1);
	}

	int nLen = sizeof(my_addr);
	int iPort = getsockname(sockfd, (struct sockaddr*)&my_addr, &nLen);
	printf("%d\n", ntohs(my_addr.sin_port));

	if (SOCKET_ERROR == listen(sockfd, BACKLOG))
	{
		printf("监听套接字错误!");
		closesocket(sockfd);
		WSACleanup();
		exit(1);
	}

	int sin_size = sizeof(struct sockaddr_in);

	while (1)
	{
		if ((client_fd = accept(sockfd, (struct sockaddr*)&remote_addr, &sin_size)) == SOCKET_ERROR)
		{
			printf("接受套接字错误!");
			closesocket(sockfd);
			WSACleanup();
			exit(1);
		}

		printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr)); 

		if (SOCKET_ERROR == send(client_fd, "Hello, you are connected!\n", 26, 0))
		{
			printf("发送数据错误!");
			closesocket(sockfd);
			closesocket(client_fd);
			WSACleanup();
			exit(1);
		}

		printf("发送数据成功!");
		closesocket(client_fd);
	}

	closesocket(sockfd);
	closesocket(client_fd);
	WSACleanup();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -