简单的应答交互客户端

简单的应答交互客户端

#include<WinSock2.h>
#include<stdio.h>
#include<iostream>
#include<string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(void)
{
	WORD wdVersion = MAKEWORD(2, 2);//定义网路库的版本,当前版本号为2.2版;
	WSADATA wdScokMsg;//结构体定义网络库的信息;
	int nRes = WSAStartup(wdVersion, &wdScokMsg);//打开网络库,返回值为int类型

	if (0 != nRes)//返回值为0则代表打开网络库成功,否则则返回相应的错误码;
	{
		switch (nRes)
		{
		case WSASYSNOTREADY:
			printf("重启计算机!");
			break;
		case WSAEINPROGRESS:
			printf("更新网络库!");
			break;
		}
		return 0;
	}

	//校验网络库的版本
	if (2 != HIBYTE(wdScokMsg.wVersion) || LOBYTE(wdScokMsg.wVersion) != 2)
	{
		WSACleanup();//关闭网络库
		return 0;
	}

	//创建套接字,客户端仍然创建的是服务器的套接字,因为是客户端去链接服务器
	//而在服务器创建服务器的套接字是为了去管理所有的套接字链接,创建的客户端套接字是为了去与这个的客户端链接
	SOCKET socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//地址的类型,套接字的类型,协议的类型。

	if (INVALID_SOCKET == socketServer)
	{
		int a = WSAGetLastError();//检测错误,检测离其最近的函数的错误码
		WSACleanup();//套接字创建失败,关闭网络库,并返回0
		return 0;
	}

	struct sockaddr_in serverMsg;
	serverMsg.sin_family = AF_INET;
	serverMsg.sin_port = htons(12345);
	serverMsg.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//本地测试用回环地址

	if (connect(socketServer, (struct sockaddr*) & serverMsg, sizeof(serverMsg)))
	{
		//错误处理的基本操作,1.得到错误码,关闭套接字,清理网络库,程序返回0,关闭程序。
		int a = WSAGetLastError();
		closesocket(socketServer);
		WSACleanup();
		return 0;
	}
	while (true)
	{
		char buf[1500] = { 0 };
		scanf("%s", &buf);

		if (SOCKET_ERROR == send(socketServer, buf, strlen(buf), 0))
		{
			int a = WSAGetLastError();
			closesocket(socketServer);
			WSACleanup();
			return 0;
		}
		int res1 = recv(socketServer, buf, 1499, 0);//接收来自客户端的信息,接收谁的信息就写谁的套接字,buf字符串用来存储接收到的信息,1499原意接收信息的长度,理论值不能大于1500,最后一个参数默认为0;
		if (0 == res1)
		{
			printf("链接中断,服务器已跑路!!!\n");
		}
		else if (SOCKET_ERROR == res1)
		{
			printf("出错了!");
		}
		else
		{
			printf("%d,    %s\n", res1, buf);//打印接收来的信息
		}


	}


	closesocket(socketServer);
	WSACleanup();

	return 0;
}

ps: 可以和之前的服务器端实现简单的通信交互

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值