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

📄 client.cpp

📁 该实例完成一个服务器端和客户端简单的会话通信过程.要求主机上安装TCP/IP协议,并设定IP.服务器端和客户端使用同一台主机的不同端口号,服务器端使用的端口号为2000,客户端使用的端口号为3000.
💻 CPP
字号:
#include "Winsock.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(lib,"wsock32.lib")
#define RECV_PORT 2000
#define SEND_PORT 3000
#define SERVERADDR "192.168.100.148"

SOCKET sock;
sockaddr_in ServerAddr;

DWORD StartSock()
{
	WSADATA WSAData;
	if (WSAStartup(MAKEWORD(2,2),&WSAData)!=0)		//初始化套接字
	//WSAStartup:加载Winsock DLL的相应版本.
	//P1:版本XY,用MAKEWORD(X,Y)来生成,X-高位字节,Y-低位字节
	//P2:指向WSADATA结构的指针,接收Winsock库版本信息.
	{
		printf("sock init fail!\n");
		return(-1);
	}
	ServerAddr.sin_family=AF_INET;					//填充服务器地址端口号
	ServerAddr.sin_addr.s_addr=inet_addr(SERVERADDR);
	ServerAddr.sin_port=htons(RECV_PORT);
	return(1);
}

DWORD CreateSocket()
{
	sock=socket(AF_INET,SOCK_STREAM,0);				//创建套接字
	//socket:创建套接字
	//P1:网络类型,一般为了AF_INET,表示在Internet域中通信
	//P2:套接字类型,SOCK_STREAM(会话套接字),SOCK_DGRAM(数据报套接字),SOCK_SEQPACKET,
	//   SOCK_RAW(原始套接字),SOCK_RDM.
	//P3:网络协议,取0,表示TCP/IP.
	//WSANOTINITIDLISED错误:未加载Winsock库
	if (sock==SOCKET_ERROR)
	{
		printf("sock create fail!\n");
		WSACleanup();
		return(-1);
	}

	return(1);
}

DWORD CallServer()
{
	CreateSocket();
	if (connect(sock,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
	//connect:建立与一个服务器端的连接
	//P1:一个未连接套接字的句柄.
	//P2:SOCKADDR_IN结构的地址.
	//P3:SOCKADDR_IN结构长度
	{
		printf("Connect fail\n");
		closesocket(sock);
		//closesocket:关闭一个套接字.
		return(-1);
	}
	return(1);
}

DWORD TCPSend(char data[])
{
	int length;
	length=send(sock,data,strlen(data),0);
	//send:在某个套接字上发送数据.
	//P1:套接字句柄.
	//P2:发送缓冲区.
	//P3:发送缓冲区中的字符数.
	//P4:调用的执行方式.
	//返回发送的字节数.
	if (length<=0)
	{
		printf("send data error!\n");
		closesocket(sock);
		WSACleanup();
		return(-1);
	}
	return(1);
}

int main()
{
	char buff[80];
	int num,i;
	StartSock();
	while (CallServer()==-1);
	printf("connect ok!\n");
	printf("press any key to send!");
	getchar();
	for (;;)
	{
		printf("Input the number of message to send: (0-exit)");
		memset(buff,0,80);
		scanf("%d",&num);
		if (num<=0)
			break;
		for (i=0;i<num;i++)
		{
			sprintf(buff,"data %d\n",i);
			printf(buff);
			TCPSend(buff);
			Sleep(100);
		}
	}
	return(0);
}

⌨️ 快捷键说明

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