大佬们问一下关于网络通信的问题

我刚学网络通信,建立了一个客户端和一个服务端。

服务端运行没问题,

但是运行客户端时却和预期不一样,客户端闪了一下就退出了

这是服务器代码:

#include<iostream>
#include<WinSock2.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
using namespace std;

int ires;

DWORD WINAPI threadpro(LPVOID pParam) 
{
	SOCKET hsock = (SOCKET)pParam;
	char buffer[1024] = { 0 };
	char sendBuffer[1024];
	if (hsock != INVALID_SOCKET)
	{
		cout << "欢迎来到六(1)之家1.0\n你可以输入“我的班级”,“作者的名字”,“我们班的外号们”" << endl << endl << endl;
	}
	while (1)//循环接收发送内容
	{
		int num = recv(hsock, buffer, 1024, 0);//阻塞函数,等待接收内容
		if (num >= 0)
		{
			cout << "RECEIVE FORM CLINET" << buffer << endl;
		}
		cout << WSAGetLastError() << endl;
		if (!strcmp(buffer, "我的班级"))
		{
			memset(sendBuffer, 0, 1024);
			strcpy(sendBuffer, "六(1)班");
			ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);
			cout << "SEND TO CLIENT" << sendBuffer << endl;
		}
		else if (!strcmp(buffer, "作者的名字"))
		{
			memset(sendBuffer, 0, 1024);
			strcpy(sendBuffer, "张宇轩");
			ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);
			cout << "SEND TO CLIENT" << sendBuffer << endl;
		}
		else if (!strcmp(buffer, "我们班的外号们"))
		{
			memset(sendBuffer, 0, 1024);
			strcpy(sendBuffer, "卷毛狮王\n廖蛋卷\n赖肥肠\n黑老蔡\n蔡子笨\n考拉\n村姑\n村长\n陈日立\n叶方贱\n赖嘎豪\n刘无敌");
			ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);
			cout << "SEND TO CLIENT" << sendBuffer << endl;
		}
		else
		{
			memset(sendBuffer, 0, 1024);
			strcpy(sendBuffer, "你输入的似乎不正确");
			ires = send(hsock, sendBuffer, sizeof(sendBuffer), 0);
		}
	}
}
int main() 
{
	WSADATA wsd;
	DWORD err = WSAStartup(MAKEWORD(2, 2), & wsd);
	cout << err << endl;
	SOCKET m_SockServer;
	sockaddr_in serveraddr;
	sockaddr_in serveraddrfrom;
	SOCKET m_Server[20];

	serveraddr.sin_family = AF_INET; //设置服务器地址家族
	serveraddr.sin_port = htons(4600); //设置服务器端口号
	serveraddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.1"); //书上填的是127.0.0.1

	m_SockServer = socket(AF_INET, SOCK_STREAM, 0);

	int i = bind(m_SockServer, (sockaddr*)&serveraddr, sizeof(serveraddr));
	cout << "bind:" << i << endl;

	int iMaxConnect = 20;
	int iConnect = 0;
	int iLisRet;
	char WarnBuf[] = "It is voer Max connet\0";
	char buf[] = "THIS IS SERVER\0";
	int len = sizeof(sockaddr);
	while (1)
	{
		iLisRet = listen(m_SockServer, 0);
		m_Server[iConnect] = accept(m_SockServer, (sockaddr*)&serveraddrfrom, &len);
		if (m_Server[iConnect], buf, sizeof(buf), 0)
		{
			ires = send(m_Server[iConnect], buf, sizeof(buf), 0);
			cout << " ACCEPT" << ires << endl;
			iConnect++;
			if (iConnect > iMaxConnect)
			{
				ires = send(m_Server[iConnect], WarnBuf, sizeof(WarnBuf), 0);
			}
			else
			{
				HANDLE m_Handle;
				DWORD nThreadId = 0;
				m_Handle = (HANDLE)::CreateThread(NULL, 0, threadpro, (LPVOID)m_Server[--iConnect], 0, &nThreadId);
			}
		}
	}
	WSACleanup();
	return 0;
}

在vs2022中是没有报错的

这是客户端代码,也没有报错:

#include<iostream>
#include<WinSock2.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
using namespace std;

void main()
{
	WSADATA wsd;
	WSAStartup(MAKEWORD(2, 2), &wsd);
	SOCKET m_SockClient;
	sockaddr_in clientaddr;

	clientaddr.sin_family = AF_INET; //设置服务器地址家族
	clientaddr.sin_port = htons(4600); //设置服务器端口号
	clientaddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.1");
	m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
	int i = connect(m_SockClient, (sockaddr*)&clientaddr, sizeof(clientaddr));
	cout << "connect" << i << endl;

	char buffer[1024];
	char inBuf[1024];
	int num;
	num = recv(m_SockClient, buffer, 1024, 0);
	if (num > 0)
	{
		cout << "欢迎来到六(1)之家1.0\n你可以输入“我的班级”,“作者的名字”,“我们班的外号们”,输入exit退出" << buffer << endl;
		while (1)
		{
			num = 0;
			cin >> inBuf;
			if (!strcmp(inBuf, "exit"))
			{
				send(m_SockClient, inBuf, sizeof(inBuf), 0);
				return;
			}
			send(m_SockClient, inBuf, sizeof(inBuf), 0);
			num = recv(m_SockClient, buffer, 1024, 0);
			if (num > 0) {
				cout << "回答:" << buffer << endl;
			}
		}
	}
}

但是运行结果却是这样的(我先启动服务端,再启动客户端):

服务端:

客户端闪一下就不见了,也没见输出什么内容

有大佬能解释一下吗?

在线等,急!!! 

要在 Ubuntu 上部署微服务并在系统重启时自动启动它们,你可以按照以下步骤操作: 1. **设置启动脚本**: - 为每个微服务创建一个启动脚本(例如 `myservice.service` 或 `.sh` 文件),该脚本负责启动服务。确保这些脚本正确设置了环境变量、依赖和其他必要的参数。 ```bash #!/bin/bash /path/to/microservice/start.sh ``` 2. **安装 systemd**: - 如果没有安装 systemd,可以通过 apt-get 安装它: ``` sudo apt update sudo apt install systemd ``` 3. **创建 systemd 单元文件**: - 将上述启动脚本放入 `/etc/systemd/system/` 目录下,并为每个微服务创建一个独立的 systemd 单元文件。例如: ```bash sudo nano /etc/systemd/system/myservice.service ``` 在文件中添加内容,类似于: ```ini [Unit] Description=My Service After=network.target [Service] ExecStart=/path/to/myservice/start.sh Restart=always # 设置服务永远重启 User=<your_username> WorkingDirectory=/path/to/service/directory [Install] WantedBy=multi-user.target ``` 4. **启用和启动服务**: - 保存并关闭文件,然后使用以下命令使服务生效并立即启动: ``` sudo systemctl enable myservice sudo systemctl start myservice ``` 5. **检查日志**: - 验证服务是否成功运行,以及日志输出。如果需要,可以配置 logrotate 来管理日志文件。 6. **更新开机自启**: - 使用 `sudo systemctl daemon-reload` 更新系统服务列表,然后再次启用服务使其开机自启: ``` sudo systemctl enable myservice ``` 现在,每次服务器重启后,这些微服务都会自动启动。记得将上述路径替换为你实际的服务路径和配置。 **相关问题:** 1. 如何查看当前已设置的自动启动服务? 2. 如何修改服务的运行权限? 3. 如何配置服务的日志级别和输出位置?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值