栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++实现同一局域网下不同主机的socket通信

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++实现同一局域网下不同主机的socket通信

C++实现同一局域网下不同主机的socket通信

本文内容大部分来源于
https://www.bilibili.com/video/BV1tb4y1C7qm?spm_id_from=333.337.search-card.all.click
在此基础上稍作修改,实现了不同主机的通信

文章目录
  • C++实现同一局域网下不同主机的socket通信
  • 一、项目结构
  • 二、tcpSocket
    • h文件
    • cpp文件
  • 三、客户端
    • cpp文件
  • 四、服务端
    • cpp文件


一、项目结构


二、tcpSocket h文件
#ifndef _TCPSOCKET_H_
#define _TCPSOCKET_H_
#include//windows平台网络库头文件
#include
#pragma comment(lib,"ws2_32.lib")//库文件

#define PORT 8888
#define err(A) cout< 
cpp文件 
#include"tcpSocket.h"
#include
#include
using namespace std;
#define _WINSOCK_DEPRECATED_NO_WARNINGS
bool init_Socket()
{
	//windows socket async  异步套接字
	//请求版本,传出参数
	WSADATA wsadata;//WSADATA,一种数据结构。这个结构被用来存储被WSAStartup函数调用后返回的Windows Sockets数据。它包含Winsock.dll执行的数据。
	if (WSAStartup(MAKEWORd(2, 2), &wsadata) != 0)
	{
		err("WSAStartup failed code ");
		return false;
	}
	return true;
}


bool close_Socket()
{
	if (WSACleanup() != 0)//关闭#pragma comment(lib,"ws2_32.lib")库文件
	{
		err("WSACleanup failed code ");
		return false;
	}
	return false;
}


SOCKET createServerSocket()
{
	//创建空的socket
	//参数1:地址协议  ipv4 ipv6   参数2:传输协议类型 流式套接字 数据包 参数3:具体某个传输协议
	SOCKET fd=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (fd == INVALID_SOCKET)
	{
		err("Socket");
		return fd;
	}

	//绑定IP地址和端口号
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);//往往本地是大端,网络是小端
	cout << "请输入服务端接受ip号" << endl;
	string ipAccept;
	cin >> ipAccept;
	addr.sin_addr.S_un.S_addr = inet_addr(ipAccept.c_str());//绑定自己(服务端)的ip,只接受该ip的地址
	
	

	if (bind(fd, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
	{
		cout << "bind error" << endl;
		return false;
	}


	//监听
	listen(fd, 10);


	return fd;
}

SOCKET createClientSocket(const char* ip)
{
	//创建空的socket
	//参数1:地址协议  ipv4 ipv6   参数2:传输协议类型 流式套接字 数据包 参数3:具体某个传输协议
	SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (fd == INVALID_SOCKET)
	{
		cout << "socket" << WSAGetLastError() << endl;
		return fd;
	}

	//绑定服务端的IP地址和端口号
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);//往往本地是大端,网络是小端
	addr.sin_addr.S_un.S_addr = inet_addr(ip);

	if (INVALID_SOCKET == connect(fd, (struct sockaddr*)&addr, sizeof(addr)))
	{
		err("connect");
		return false;
	}
	return fd;
}
三、客户端 cpp文件
#include"../tcpSocket/tcpSocket.h"
#include
#include
using namespace std;
int main()
{
	init_Socket();
	string ipIput;
	cout << "请输入想连接的IP:";
	cin >> ipIput;
	cout << endl;
	SOCKET fd = createClientSocket(ipIput.c_str());//SOCKET fd=createClientSocket("127.0.0.1");

	string sendbuf;
	char rcvbuf[BUFSIZ] = { 0 };
	//先说一句话
	//if (SOCKET_ERROR == send(fd, sendbuf.c_str(), sendbuf.size(), 0))
	//{
	//	err("send");
	//}
	while (1)
	{
		cout << "输入您想发送的信息:";
		cin >> sendbuf;
		if (send(fd, sendbuf.c_str(), sendbuf.size(), 0) == SOCKET_ERROR)
		{
			err("send");
		}

		if (0 < recv(fd, rcvbuf, BUFSIZ, 0))
		{
			cout << rcvbuf << endl;
			memset(rcvbuf, 0, sizeof(rcvbuf));
		}
	}



	closesocket(fd);

	close_Socket();

	cout << "end!" << endl;
	system("pause");

	return 0;
}
四、服务端 cpp文件
#include
#include
#include"../tcpSocket/tcpSocket.h"
using namespace std;
int main()
{
	init_Socket();

	SOCKET serfd = createServerSocket();
	cout << "wait client connecnt...." << endl;
	//客户端请求连接
	SOCKET clifd=accept(serfd, NULL, NULL);
	if (INVALID_SOCKET == clifd)
	{
		err("error accept");		
	}
	//可以和客户端通信
	char rcvbuf[BUFSIZ] = { 0 };
	string rcvstr;

	string sendbuf;
	while (1)
	{
		if (0 < recv(clifd,rcvbuf, BUFSIZ, 0))
		{
			cout << rcvbuf<< endl;
			memset(rcvbuf, 0, sizeof(rcvbuf));
			//cout << rcvstr << endl;

		}

		//发送消息
		cout << "输入您想发送的信息:";
		cin >> sendbuf;
		if (send(clifd, (const char *)sendbuf.c_str(), sendbuf.size(), 0) == SOCKET_ERROR)
		{
			err("send");
		}
	}
	

	closesocket(clifd);
	closesocket(serfd);

	close_Socket();



	system("pause");
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号