`
CJxixi
  • 浏览: 104360 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

c++ socket 消息构建

阅读更多

客户端 :

/*
client.c
向服务器发送接收数据包

*/
#include <stdio.h>
#include <Winsock2.h>
#include<iostream>
#include <memory.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

void main()
{

    WORD wVersionRequested;
    WSADATA wsaData; //WSAata用来存储系统传回的关于WinSocket的资料。
   
    int err;
    wVersionRequested = MAKEWORD( 1, 1 );
    err = WSAStartup( wVersionRequested, &wsaData );
   
    if ( err != 0 ) {
        return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ){
        WSACleanup( );
        return;
    }

    SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接

    //初始化连接与端口号

    SOCKADDR_IN addrSrv;

    //定义服务器地址端口

    char* ip = "192.168.202.128";
    u_short portNumber = 6000;
   
    addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);//本机地址,服务器在本机开启

    addrSrv.sin_family = AF_INET;

    addrSrv.sin_port = htons(portNumber);// 设置端口号

    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器

    char recvBuf[50];

    //必须要将非char类型指针转化为char*指针
    int b = 1;
    char* cb = (char*)&b;   
    char *a = "123";
    char str[1024];

    //copy内存
    memcpy(str,cb,sizeof(b));
    memcpy(str+sizeof(b),a,strlen(a)+1);
       
    cout<<str<<endl;

    send(sockClient,str,sizeof(str),0);

    //发送数据到服务器端
    //send(sockClient,cp,sizeof(a),0);

    //从服务器接收数据
    //recv(sockClient,recvBuf,10,0);//接受数据
    //printf("%s\n",recvBuf);

    closesocket(sockClient);//关闭连接

    WSACleanup();
}

 

server.c

 

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <memory.h>

int main(int argc, char *argv[])
{
        int sockfd,new_fd;
        struct sockaddr_in server_addr;
        struct sockaddr_in client_addr;
        int sin_size,portnumber;
        char hello[]="Hello LR\n";
        int n;
        char rbuf[1024];



        if(argc!=2)
        {
                fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
                exit(1);
        }

        if((portnumber=atoi(argv[1]))<0)
        {
                fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
                exit(1);
        }

        /* 服务器端开始建立socket描述符 */
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
        {
                fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
                exit(1);
        }

        /* 服务器端填充 sockaddr结构  */
        bzero(&server_addr,sizeof(struct sockaddr_in));
        server_addr.sin_family=AF_INET;
        server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        server_addr.sin_port=htons(portnumber);

        /* 捆绑sockfd描述符  */
        if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
        {
                fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
                exit(1);
        }

        /* 监听sockfd描述符  */
        if(listen(sockfd,1)==-1)
        {
                fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
                exit(1);
        }

        while(1)
        {
                /* 服务器阻塞,直到客户程序建立连接  */
                sin_size=sizeof(struct sockaddr_in);

                if((new_fd=accept(sockfd,(struct sockaddr *)NULL,NULL))==-1)
                {

                        fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
                        exit(1);
                }

               fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));

               n = recv(new_fd,rbuf,sizeof(rbuf),0);

               if(n>0){

                 // 解客户端的消息
                  int a;
                  char c[1024];
                  memcpy(&a,rbuf,4);
                  memcpy(c,rbuf+4,6);

                  printf("recv msg:%d\n",a);
                  printf("recv msg:%s\n",c);

               }

                /* 这个通讯已经结束     */
                close(new_fd);
                /* 循环下一个     */
        }
        close(sockfd);
        exit(0);
}

分享到:
评论

相关推荐

    基于C++ 使用 UDP Socket 实现可靠文件传送(构建简单的文件传输协议)【100013164】

    基于C++ 使用 UDP Socket 实现可靠文件传送(构建简单的文件传输协议)【100013164】

    C实现基于Socket实现自定义协议通信

    掌握C语言形式的Socket编程接又用法,能够正确发送和接收网络数据包; 分为客户端和服务端

    Linux系统设计-Linux C++ socket网络编程-即时通信系统

    Linux系统具有高效的网络功能和稳定的性能,因此被广泛应用于服务器领域,Linux是云计算的核心组成部分,被广泛用于构建云平台和云服务。许多知名的云计算服务提供商都采用Linux系统作为其基础架构,一些游戏平台和...

    Socket模型c++版本详解

    如果你想在Windows 平台上构建服务器应用,那么I/O 模型是你必须考虑的。Windows 操作 系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、 重叠I/O(Overlapped I/O)和完成端口...

    C++多人聊天室的构建

    介绍了Socket的工作机制和基于CAsyncSocket 类的Sockets编程的基本方法。通过一个应用实例,编写服务端和客户端代码,实现多人之间信息传递。

    socket实现服务器和客户端数据的传输

    以socket构建服务器和客户端架构,实现c++和unity两客户端通过服务器传输数据

    WebsocketPP C++构建Web服务器源代码

    https://blog.csdn.net/mfcing/article/details/50118591 这个博客的代码,很简单。主要多线程这个比较好,可以好好研究。如果行可以用于pc的服务器。

    C++网络爬虫项目

    编写单位: 达内IT培训集团 C++教学研发部 编写人员: 闵卫 定稿日期: 2015年11月20日 星期五WEBCRAWLER 网络爬虫实训项目 2 1. 项目概述 互联网产品形形色色,有产品导向的,有营销导向的,也有技术导向的,但是 ...

    SocketIO-Client-CPP-iOS-Builds:用于https的静态库构建

    Socket.IO C ++客户端构建静态库。椰子足pod 'SocketIO-Client-CPP' 仅此回购的维护者发布新版本时,您需要更新Headers/** 替换libUniversalDebug.a 替换libUniversalRelease.a 更新SocketIO-Client-CPP.podspec $ ...

    zmqcpp:ZMQ C++ 包装器,没有添加魔法

    通过类型流轻松构建消息。用法连接到另一个 zmq 套接字并发送消息: #include "zmqcpp.h"using namespace zmqcpp;Context ctx;Socket socket(ctx, xreq);socket.setsockopt(linger, 0);socket.connect("tcp://...

    C++标准库介绍.pdf

    标准c库大全:C++标准库介绍 疯狂代码 http://CrazyCoder.cn/ ĵ:http:/CrazyCoder.cn/VC/Article12860.html  标准库中提供了C基本设施虽然C标准库随着C标准折腾了许多年直到标准出台才正式定型但是在标准库实 现上...

    基于C++11线程池技术简单易用的轻量级网络编程框架源码.zip

    tcp服务器,使用非常简单,只要实现具体的tcp会话(TcpSession类)逻辑,使用模板的方式可以快速的构建高性能的服务器。 对套接字多种操作的封装。 线程库 使用线程实现的简单易用的定时器。 信号量。 线程组。 简单...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版 原书名:Pro Android C++ with the NDK 原出版社: Apress 作者: (美)Onur Cinar 译者: 于红 佘建伟 冯艳红 丛书名: 移动开发...

    30天自制C++服务器,包含教程和源代码

    将会把重点放在如何写代码上,而不会花太多的篇幅讲解背后的计算机基础原理,涉及到的地方会给出相应书籍的具体章节,但这并不代表这些理论知识不重要,事实上理论基础相当重要,没有理论的支撑,构建出一个高性能...

    Android开发之Socket通信传输简单示例

    字符串传输主要用于简单的应用,比较复杂的应用(比如Java和C++进行通信),往往需要构建自己的应用层规则(类似于应用层协议),并用字节来传输。 2.基于字符串传输的Socket案例 1)服务器端代码(基于控制台的应用程序...

    C++基于线程池技术实现大并发网络IO框架,一个基于C++11的轻量级网络框架

    tcp/udp客户端,接口简单易用并且是线程安全的,用户不必关心具体的socket api操作。 tcp/udp服务器,使用非常简单,只要实现具体的tcp/udp会话(Session类)逻辑,使用模板的方式可以快速的构建高性能的服务器。 对...

    xgnet oiocp(重叠完成端口) 封装库,网络引擎

    windows socket api 封装库,采用重叠完成端口模型实现,引擎采用异步消息控制,实现了一个简明易用的网络框架,发送和接收数据全都采用异步模式,发送和接收数据都不会给调用线程带来等待或者延迟,同时引擎实现了两...

    基于C++实现的轻量级Web服务器源码+项目说明.zip

    基于C++实现的轻量级Web服务器源码+项目说明.zip 开发部署环境 操作系统: Ubuntu 16.04 编译器: g++ 5.4 版本控制: git 自动化构建: cmake 集成开发工具: CLion 编辑器: Vim 压测工具:WebBench 核心功能及...

Global site tag (gtag.js) - Google Analytics