首页 > 其他分享 >客户端,服务端

客户端,服务端

时间:2024-06-08 10:12:04浏览次数:18  
标签:__ 头文件 cout send include buf 服务端 客户端

//客户端 
#include"mysocket.h"
//头文件 
using namespace std;
 
int main()
{
	cout << "-----------------客户端----------------\n";
	startup();				//启动 
	//检测版本号
	if (LOBYTE(wsdata.wVersion) != 2 || HIBYTE(wsdata.wHighVersion) != 2) {
		cout << "版本号与服务端不匹配!" << endl;
		WSACleanup();
		return FALSE;
	}
	//填充服务端信息:这里填和服务端一样的就好,不做解释 
	SOCKET client = createSocket(PF_INET, SOCK_STREAM);
	SOCKADDR_IN server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.49");
	server_addr.sin_port = htons(8226);
	//发送连接请求 请求连接服务器
	if (connect(client, (SOCKADDR*)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
		cout << "连接错误!" << endl;
		WSACleanup();
		return -1;
	}
	cout << "成功连接到服务器" << endl;
	char send_buf[1145], recv_buf[4514];
	while(100){
		cout << "输入要发送的信息:";
		cin>>send_buf;
		mysend(client, send_buf);
		cout << "等待服务端响应...\n";
		myrecv(client, recv_buf);
		cout << "收到来自服务端的信息:" << recv_buf << endl;
	}
	return 0;
}

  

//服务端(以C++作范例)
#include"mysocket.h"		
//导入头文件:由于mysock头文件本身就有其它文件,这里无需导入 	
using namespace std;
 
SOCKET s_accept;
 
int main()
{
	cout << "---------------------------服务端---------------------------\n";
	cout << "正在启动...\n";
	startup();
	cout << "启动成功!\n";
	SOCKET s = createSocket(PF_INET, SOCK_STREAM);
	//以IPV6协议创建套接字 
	//填充信息 
	SOCKADDR_IN server_addr;
	server_addr.sin_family = AF_INET;//协议 
	server_addr.sin_port = htons(8226);//端口,随便填 
	server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); 
	//ip地址,这里填服务端设备上的ip,127.0.0.1是本地ip,不能实现跨设备交互 
	if (bind(s, (SOCKADDR*)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR)
	//绑定套接字 
	{
		cout << "套接字绑定失败!\n";
		WSACleanup();
		return FALSE;
	}
	cout << "套接字绑定成功!" << endl;
	if (listen(s, 1) == SOCKET_ERROR)
	{
		//监听:将服务端转为被动状态,接收请求 
		cout << "监听失败!\n";
		WSACleanup();
		return FALSE;
	}
	cout << "设置监听状态成功!\n";
	sockaddr_in accept_addr;         //用来记录请求连接的套接字信息
	int len = sizeof(SOCKADDR);
	cout << "等待客户端发起请求..." << endl;
	SOCKET t = accept(s, (SOCKADDR*)&accept_addr, &len);
	//接受连接请求 
	if (s_accept == SOCKET_ERROR) {
		cout << "请求错误!\n";
		WSACleanup();
		return FALSE;
	}
	cout << "建立连接成功!\n";
	char recv_buf[1145], send_buf[4514];
	while(1){
		//信息交互部分,可以作改动 
		myrecv(t, recv_buf);
		cout << "接收到客户端信息:" << recv_buf << endl;
		cout << "请输入要发送的信息:";
		cin >> send_buf;
		mysend(t, send_buf);
	}
    return 0;
}

  

//mysocket.h
#ifndef __MYSOCKET_H__
#define __MYSOCKET_H__
//头文件保护 
#include<bits/stdc++.h>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
 
using namespace std;
 
WSADATA wsdata;
 
void startup(){
	//异步启动 
	if (WSAStartup(MAKEWORD(2, 2), &wsdata))
	/*	               ^                ^ 
			    版本号,这里用的是2.2   |
			    			数据存放处,这里设成全局变量 
	*/ 
	{
		//返回0则成功,否则失败,报错 
		cout << "启动失败!\n";
		WSACleanup();
		exit(0);
	}
}
 
SOCKET createSocket(int af, int type){
	/*原函数原型: 
	  SOCKET socket(int af, int type, int protocol)
	  				    ^       ^           ^
	  			      协议  类型(后文) 形式(一般用0) 
	*/
	SOCKET ret = socket(af, type, 0);
	if (ret == INVALID_SOCKET)  //错误返回INVALID_SOCKET 
	{
		//报错 
		cout << "创建套接字失败!\n";
		WSACleanup();
		exit(0);
	}
	return ret;
}
 
void mysend(SOCKET s, const char* buf){
	/*
		带报错的send()函数,原函数原型为 :
		int send(SOCKET s, const char* buf, int len, int flag) 
		这里为了简化,省略后两个参数。 
		函数把buf发送给s,返回发送长度 
	*/ 
	int len = send(s, buf, sizeof(buf), 0);
	if(len < 0)		//发送错误 
	{
		cout << "信息发送失败!\n";
		WSACleanup();
		exit(0);
	}
}
 
void myrecv(SOCKET s, char* buf){
	/*
		带报错的recv()函数,其原型为: 
		int recv(SOCKET s, char* buf, int len, int flag)
		同样省略后两个参数 
		函数将从s收到的信息储存在buf中,返回接收长度 
	*/
	int len = recv(s, buf, sizeof(buf), 0);
	if(len < 0)
	{
		cout << "信息接收失败!\n";
		WSACleanup();
		exit(0);
	}
}
 
#endif
//别忘了 

  

在连接器命令行加入
 -lwsock32

  

标签:__,头文件,cout,send,include,buf,服务端,客户端
From: https://www.cnblogs.com/As10016/p/18238347

相关文章

  • 【Python-因特网客户端编程-12】Python 提供了对 POP 和 IMAP 协议的支持
    Python提供了对POP和IMAP协议的支持一、使用Python代码与POP3和IMAP4邮件服务器进行通信使用`poplib`进行POP3操作示例:使用`poplib`获取邮件使用`imaplib`进行IMAP操作示例:使用`imaplib`获取邮件比较`poplib`和`imaplib`总结二、smtplib......
  • 利用线程池给客户端传文件
    主函数#include<func.h>#include"threadPool.h"#include"server.h"#defineEVENTSNUM100intpipefd[2];voidsigHandle(intsigno){printf("%dsignal\n",signo);intexitNum=1;write(pipefd[1],&exitN......
  • UDP——实现C/S架构,有一台服务器,服务器中存储n首音频,要求客户端可以直接下载服务器的
    实现C/S架构,有一台服务器,服务器中存储n首音频,要求客户端可以直接下载服务器的音频,并且可以正常在客户端播放。服务器/*************************************************************************************************************************** filename: udp_ser......
  • C语言通过socket实现TCP客户端
    socket概念​ 从wiki上了解,socket这个词追溯到1971年RFC147的发布。​ 目前我的理解:常用于指操作系统提供的API,该API允许使用TCP、UDP进行连接,但不仅限于TCP、UDP协议。实现目的利用系统提供函数接口,通过C语言实现对TCP服务器(IP地址)的连接,以及收发数据。实现......
  • 实战:干掉高德地图7.2.0版iOS客户端的反动态调试保护
    沙梓社snakeninny315年2月 高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。苹果自带的地图采用的就是高德的数据,足见高德之权威 昨天突发奇想,对高德地图上中一个官方不提供的功能产生了浓厚的兴趣,试图通过hack的方式来实现这个功能。谁知刚架上LLDB......
  • 云主机(操作系统:CentOS7版本)安装nfs客户端,挂载文件系统
    本文分享自天翼云开发者社区《云主机(操作系统:CentOS7版本)安装nfs客户端,挂载文件系统》,作者:c****n1.保证宿主机上有nfs-utils1.1若宿主机yum源不可以用(1)本地下载nfs-utils安装包下载链接:https://mp.csdn.net/mp_download/manage/download/UpDetailed?spm=3001.5299(2)登录宿主机,......
  • 使用 Winsock 实现简单的 TCP 服务器和客户端教程
    使用Winsock实现TCP服务器和客户端在这篇博客中,我们将介绍如何使用WinsockAPI在Windows上实现简单的TCP服务器和客户端。Winsock是Windows套接字扩展,提供了网络编程所需的API。通过这两个示例代码,我们将展示如何初始化Winsock库、创建套接字、进行连接以......
  • tcp客户端通信
    网络编程客户端通信代码/***************************************************************************************filename:1.c*author: [email protected]*date:2024/06/05*function: tcp客户端通信*note :none*Copy......
  • 【专题】2024客户端游戏市场营销发展报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36402原文出处:拓端数据部落公众号报告合集显示,中国客户端游戏市场在2023年创新高,达到662.83亿元,表明精品化和跨端生态趋势对市场的推动作用。报告合集强调客户端游戏的独特优势,如精品内容、视听体验和操作反馈等,促进了市场稳定增长。客户端游戏生......
  • 网络编程练习题---利用TCP协议完成客户端与服务端点对点通信
    目录题目一解析代码实现题目二:解析代码实现tcp_client.ctcp_server.c题目一设计程序实现解析www.baidu.com的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确。解析主机打算响应某个网站的网络请求,但是只知道网站域名是无法通信的,需要对域名进行地址解析,得到网站的公......