socket(C++)客户端和服务端

服务端 

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<WinSock2.h>
#include<stdio.h>

#define PORT 5150
#define MSGSIZE 1024

#pragma comment(lib,"ws2_32.lib")

void main()
{
	//1.初始化
	WSADATA     wsaData;
	WSAStartup(0x0202, &wsaData);

	//2.创建服务端+客户端套接字  地址
	SOCKET sListen;
	sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//返回值是成功为0,失败为-1
	SOCKET sClient; //无需初始化

					//3. 服务端自身地址的设置
	SOCKADDR_IN local;
	SOCKADDR_IN client;  //客户端的地址 此处无需处理
	local.sin_family = AF_INET;
	local.sin_port = htons(PORT);
	local.sin_addr.s_addr = htonl(INADDR_ANY);

	//4.定义一个客户端地址+绑定操作

	bind(sListen, (struct sockaddr *) &local, sizeof(SOCKADDR_IN));

	//5.将socket设置为监听模式
	listen(sListen, 1);   //参数2表示可以监听的个数

						  //6.接收客户端发送的连接请求
	int iaddrSize = sizeof(SOCKADDR_IN);
	sClient = accept(sListen, (struct sockaddr *)&client, &iaddrSize);  //注意此处最后一个参数是地址,而不是长度和bind函数不同

																		//打印客户端的部分信息
	printf("Accepted client:%s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));

	//7.传输数据
	char szMessage[MSGSIZE];  //收发缓冲区
	int ret; //收到的个数
	while (TRUE)
	{
		ret = recv(sClient, szMessage, MSGSIZE, 0);
	
		szMessage[ret] = '\0';
		printf("Received [%d bytes]: '%s'\n", ret, szMessage);
		printf("Send:");
		//从键盘输入
		gets_s(szMessage);
		send(sClient, szMessage, strlen(szMessage), 0);
	}
	
	system("pause");

}

客户端 

#include<winsock.h>
#include<stdio.h>

#define SERVER_ADDRESS "127.0.0.1" //服务器端IP地址
#define PORT    5150    //服务器端的端口号
#define MSGSIZE 1024  //收发缓冲区的大小

#pragma comment(lib,"ws2_32.lib")
int main()
{
	//1.初始化
	//该结构体包含系统所支持的winsock版本信息
	WSADATA wsaData;
	//初始化Winsock2.2
	if (WSAStartup(0x0202, &wsaData) != 0)  //WSAStartup(MAKWWORD(2,2),&wsaData)使用Socket的程序在使用Socket之前必须调用WSAStartup函数。
											//以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
	{
		printf("无法初始化!"); return 0;
	}
	//2.socket套接字
	//定义客户端连接所用的套接字
	SOCKET sClient;
	//参数1:TCP/IP协议族,参数2:TCP协议,UDP使用SOCK_DGRAM 
	sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//AF_INET就是IPV4通信AF_INET6是IPV6通信
												//SOCK_STREAM是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,即TCP链接
												//sock_dgram 是无保障的面向消息的socket , 主要用于在网络上发广播信息。

	if (sClient == INVALID_SOCKET)
	{
		printf("socket failed");
		return 0;
	}
	//3.远端服务器
	//保存远端服务器地址
	SOCKADDR_IN server;
	//置0操作
	memset(&server, 0, sizeof(SOCKADDR_IN));
	//指定远端服务器的3个参数
	server.sin_family = AF_INET; //指定地址家族
	server.sin_port = htons(PORT);//指定端口号
	server.sin_addr.s_addr = inet_addr(SERVER_ADDRESS);//server.sin_addr.s_addr=htonl(SERVER_ADDRESS)
													   //sin_addr字段用于保存IP地址,sin_addr字段也是一个结构体,sin_addr.s_addr用于保存最终的IP地址
													   //inet_addr()函数用于将形如"127.0.0.1"字符串转换为IP地址格式
													   //4.连接到服务器
	connect(sClient, (struct sockaddr *)&server, sizeof(SOCKADDR_IN));

	//5.建立连接后传输数据
	char  szMessage[MSGSIZE]; //收发缓冲区
	int ret; //成功接收到的字节数
	while (TRUE)
	{
		printf("Send:");
		//从键盘输入
		gets_s(szMessage);
		//发送数据
		//指明发送数据的套接字,待发送数据的保存地址,指明数据长度
		send(sClient, szMessage, strlen(szMessage), 0);

		//接收数据
		ret = recv(sClient, szMessage, MSGSIZE, 0);
		szMessage[ret] = '\0'; //添加这个截断字符

		printf("Received [%d bytes ]: '%s'\n", ret, szMessage);

	}
	//6.释放资源和结束工作
	closesocket(sClient);
	WSACleanup();
	return 0;
}

 

 

 

### 回答1: MFC(Microsoft Foundation Classes)是微软公司开发的一套面向对象的C++类库,用于开发Windows应用程序。在MFC中,客户端服务端socket是用来进行网络通信的重要组件。 客户端socket指的是在网络中发起连接的一方。在MFC中,可以使用CSocket类来创建和管理客户端socket。通过CSocket类的成员函数,可以实现与服务器的连接、发送和接收数据等操作。客户端socket可以向服务器发送请求,获取相应的数据或服务。 服务端socket则是接受客户端连接的一方。也是通过CSocket类来创建和管理服务端socket服务端socket可以监听端口,接受客户端的连接请求,并与客户端建立通信。服务端socket可以处理多个客户端的请求,提供相应的服务。 在使用MFC开发网络应用程序时,客户端服务端socket通常需要配合使用。客户端socket负责与服务端建立连接,并发送请求。服务端socket则负责接受客户端的连接请求,并处理客户端的请求。通过socket编程,可以实现客户端服务端的数据交互,实现网络通信功能。 总结来说,MFC中的客户端服务端socket是实现网络通信的重要组件。通过客户端socket可以向服务器发送请求,获取相应的数据或服务。而服务端socket则接受客户端的连接请求,并提供相应的服务。通过MFC提供的CSocket类,我们可以方便地创建、管理和控制这些socket,实现客户端服务端之间的数据交互。 ### 回答2: MFC是Microsoft Foundation Classes的缩写,它是微软公司为了简化Windows应用程序的开发而开发的一个类库。客户端服务端socket则是在网络编程中使用的两种角色。 在MFC中,我们可以使用MFC类库提供的相关类来实现客户端服务端socket的通信。客户端socket通常用于向服务器发送请求并接收服务器的响应。我们可以使用MFC的CAsyncSocket类来创建一个客户端socket对象,然后通过对象的方法来连接服务器、发送数据和接收数据。 服务端socket则是用于接收客户端的请求并提供相应的服务。我们可以使用MFC的CSocket类来创建一个服务端socket对象,通过对象的方法来绑定本地地址和端口、监听客户端的连接请求、接收客户端发送的数据以及向客户端发送数据等操作。 在实际应用中,客户端服务端socket可以通过网络进行通信,比如TCP/IP协议。客户端通过连接服务端socket来发送请求和接收响应,而服务端socket则通过接收客户端连接来处理客户端的请求并提供相应的服务。 总之,MFC提供了方便易用的类库来实现客户端服务端socket的通信,开发人员可以使用这些类库来快速开发网络应用程序。 ### 回答3: MFC是微软基于Windows操作系统的应用程序开发框架,提供了许多方便的类和函数,用于开发Windows图形用户界面应用程序。MFC中提供了用于创建和管理客户端服务端socket的类。 客户端socket用于建立与服务器的连接,并向服务器发送请求。在MFC中,可以使用CSocket类创建和管理客户端socket。CSocket类提供了一组方法,如Create、Connect、Send等,可以方便地创建一个客户端socket,并与服务器建立连接,发送数据到服务器。 服务端socket用于接受客户端的连接请求,并处理客户端发送的数据。在MFC中,可以使用CSocket和CAsyncSocket类来创建和管理服务端socket。CSocket类提供了一个Accept方法,用于接受客户端的连接请求,当有新的客户端连接时,会触发一个Accept事件,开发者可以重写该事件处理函数来处理新的连接。CAsyncSocket类是一个异步的socket类,在服务端应用程序中常用于处理多个客户端的连接和数据交互。 在MFC中,客户端服务端socket之间的通信可以通过发送和接收数据来实现。客户端可以使用Send方法发送数据到服务器,而服务端可以使用Send方法将数据发送给已连接的客户端客户端服务端之间的数据交换可以使用字节流,也可以使用特定的通信协议,如HTTP、TCP/IP等。 总之,使用MFC的CSocket类和CAsyncSocket类可以方便地创建和管理客户端服务端socket,实现客户端与服务器之间的通信。通过发送和接收数据,可以实现数据的传输和交换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值