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

服务端,客户端

时间:2024-09-07 09:13:49浏览次数:7  
标签:__ 头文件 cout send include buf 服务端 客户端

//服务端(以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;
}
//客户端
#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;
}
//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
//别忘了

  

 

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

相关文章

  • AS-V1000视频监控平台web客户端播放实时视频和视频录像时,有个别画面出现卡顿和花屏问
    目录一、问题背景二、解决过程  1、检查平台进程  2、检查服务器CPU内存的使用情况  ①top/htop命令  ②vmstat命令  ③free命令  ④sar命令  3、检查网络带宽情况  三、最终效果一、问题背景  客户在公网测试服务器中的视......
  • electron 客户端 windows linux(麒麟V10)多系统离线打包 最新版 <一>
    electron客户端下载、构建、打包在国内网络情况下,绝对不是什么易事。更不要说离线干活,更是难上加难。这一篇主要讲下windows离线环境下,如何完成electron的下载打包。咱废话不多说,直接上干货。注意,我的大前提是完全没有网络。第一,需要下载什么windows环境下需要下载electron......
  • AS-V1000视频监控平台客户端播放实时视频时,一些视频画面显示的时间不准确的解决方法
    目录一、背景说明二、解决过程  1、查看设备时间  2、查看服务器时间  3、ntp介绍  1)ntp的概念  2)ntp的同步方式  3)ntp的优势  4、自动校准服务器和设备时间  1)下载ntp  2)修改ntp.conf  3)重启ntp服务,自动校准时间......
  • Linux 客户端指定NTP服务器
    1.安装chrony服务dnfinstallchrony2.配置chrony服务vim/etc/chrony.conf#指定NTP服务器地址server114.114.114.114iburst3.启动服务systemctlstartchronydsystemctlenablechronyd4.验证配置chronyctracking......
  • Java中的服务端点认证与授权:JWT与Spring Security OAuth2
    Java中的服务端点认证与授权:JWT与SpringSecurityOAuth2大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何在Java应用中实现服务端点的认证与授权,重点关注JWT(JSONWebToken)和SpringSecurityOAuth2。我们将通过实际代码示例展......
  • Java中的服务端点请求跟踪:Spring Cloud Sleuth
    Java中的服务端点请求跟踪:SpringCloudSleuth大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何使用SpringCloudSleuth来实现Java应用中的服务端点请求跟踪。SpringCloudSleuth提供了一种简单而强大的方式来跟踪跨服务的请求,从而......
  • Java中的服务端点保护:Spring Security与OAuth2
    Java中的服务端点保护:SpringSecurity与OAuth2大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨如何在Java应用中保护服务端点,重点介绍SpringSecurity与OAuth2这两种强大的安全机制。我们将通过实际代码示例演示如何使用这些工具来......
  • Java中的服务端点监控:Actuator与Micrometer
    Java中的服务端点监控:Actuator与Micrometer大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Java应用中实现服务端点监控,重点介绍SpringBootActuator和Micrometer这两个工具。通过示例代码,我们将展示如何配置和使用这些工具来监......
  • Java中的服务端点安全性:Spring Security的高级特性
    Java中的服务端点安全性:SpringSecurity的高级特性大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨SpringSecurity的高级特性,以增强Java应用的服务端点安全性。本文将展示如何利用SpringSecurity的强大功能来保护服务端点,涵盖配置......
  • windows系统Redis安装,启动与客户端连接,redis-python模块安装
    1、https://www.cnblogs.com/chunyouqudongwuyuan/p/16475220.html#redis%E5%9F%BA%E6%9C%AC%E8%BF%9E%E6%8E%A5Redis安装,启动与客户端连接,redis-python模块安装redis安装由于windows对redis支持不好,所以在windows下只能使用较老版本的redis只维护到3.x https://github.c......