//网络套接字编程实例,服务器端,TCP通信。
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(,),&wsaData);  //初始化版本
    SOCKET sList = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  //初始化socket
    if (sList == INVALID_SOCKET) //判断socket是否建立成功
    {
        cout << "socket error\n";
    }
    else
    {
        cout << "socket success\n";
    }
    sockaddr_in asd;   //申明bind中addr参数,这是申明,一个结构体。
    asd.sin_family = AF_INET;        //设置结构体,必须是:AF_INET
    asd.sin_port = htons();      //指定TCP或UDP通信服务端口号,htons函数将主机无符号短整型转换成网络字节顺序,1990是本地监听的端口号。
    asd.sin_addr.S_un.S_addr = INADDR_ANY; //INADDR_ANY表示所有可用地址
    if (bind(sList, (LPSOCKADDR)&asd, sizeof(asd)) == SOCKET_ERROR) //绑定本地IP和端口
    {
        cout << "bind error";
        closesocket(sList);
        ;
    }
    ) == SOCKET_ERROR)
    {
        cout << "listen error";
        closesocket(sList);
        ;
    }//监听,5为连接最数,注意listen只支持上面的SOCK_STREAM也就是TCP,UDP不用条用此函数。

    // 循环接受客户的连接请求
    sockaddr_in remoteAddr;
    SOCKET sClient;
    int nAddrlen = sizeof(remoteAddr);
    ];
    )
    {
        // 接受一个新连接
        sClient = accept(sList, (SOCKADDR*)&remoteAddr, &nAddrlen);
        //错误
        if (sClient == INVALID_SOCKET)
        {
            cout << "accept error";
            continue;
        }
        //打印出连接者的ip
        cout << " 接受到一个连接:" << inet_ntoa(remoteAddr.sin_addr)<<"\n";
        , );
        )
        {
            //为了防止打印出错,把字符串结尾设成0x00
            revData[ret] = 0x00;
            cout<<revData;
        }
        //发送给客户端数据
        char *buff = "握手,我是来自服务端的信息,TCP建立成功\n";
        send(sClient, buff, strlen(buff), );
        closesocket(sClient);
    }
    closesocket(sList);
    system("pause");
    ;
}
//网络套接字编程实例,客户端。
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
#include <windows.h>
#include <WS2tcpip.h>
using namespace std;

int main()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(, ), &wsaData);  //初始化版本
    SOCKET sList = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  //初始化socket
    if (sList == INVALID_SOCKET) //判断socket是否建立成功
    {
        cout << "socket error\n";
    }
    else
    {
        cout << "socket success\n";
    }
    sockaddr_in asd;   //申明bind中addr参数,这是申明,一个结构体。
    asd.sin_family = AF_INET;        //设置结构体,必须是:AF_INET
    asd.sin_port = htons();      //指定TCP或UDP通信服务端口号,htons函数将主机无符号短整型转换成网络字节顺序,1990是本地监听的端口号。
    asd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //INADDR_ANY表示所有可用地址
    if (connect(sList, (sockaddr*)&asd, sizeof(asd)) == SOCKET_ERROR)
    {
        cout<<"connect error\n";
        closesocket(sList);
        ;
    }
    char *buff = "我是来自客户端的信息";
    int nAddrlen = sizeof(asd);
    ];
    send(sList, buff, strlen(buff), );
    , );
    )
    {
        revData[ret] = 0x00;
        cout << revData;
    }
    closesocket(sList);
    WSACleanup();
    system("pause");
    ;
}

TCP通信的更多相关文章

  1. 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版

    目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...

  2. JAVASE02-Unit010: 多线程基础 、 TCP通信

    多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...

  3. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  4. NetworkComms V3 使用TCP通信传递IList<T>类型的数据

    客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...

  5. [C语言]一个很实用的服务端和客户端进行TCP通信的实例

    本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...

  6. ACE_linux:TCP通信

    1.涉及类 ACE_INET_Addr//ACE网络地址ACE_SOCK_Acceptor//ACE网络服务器ACE_SOCK_Connector//ACE网络客户端ACE_SOCK_Stream// ...

  7. 异步tcp通信——APM.Server 消息推送服务的实现

    消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...

  8. 异步tcp通信——APM.ConsoleDemo

    APM测试 俗话说麻雀虽小,五脏俱全.apm虽然简单,但是可以实现单机高性能消息推送(可以采用redis.kafka等改造成大型分布式消息推送服务器). 测试demo: using System; u ...

  9. 异步tcp通信——APM.Core 服务端概述

    为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给 ...

随机推荐

  1. 【.net 深呼吸】跨应用程序域执行程序集

    应用程序域,你在网上可以查到它的定义,凡是概念性的东西,大伙儿只需要会搜索就行,内容看了就罢,不用去记忆,更不用去背,“名词解释”是大学考试里面最无聊最没水平的题型. 简单地说,应用程序域让你可以在一 ...

  2. Android-armebi-v7a、arm64-v8a、armebi的坑

    先来一波扫盲: armeabi:针对普通的或旧的arm v5 cpu armeabi-v7a:针对有浮点运算或高级扩展功能的arm v7 cpu(32位ARM设备) arm64-v8a:64位ARM设 ...

  3. ASP.NET Core的路由[3]:Router的创建者——RouteBuilder

    在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...

  4. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  5. AFNetworking 3.0 源码解读 总结(干货)(下)

    承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...

  6. [C#] C# 知识回顾 - 序列化

    C# 知识回顾 -  序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...

  7. $ORACLE_HOME变量值末尾多“/”惹的祸

    之前一直误以为$ORACLE_HOME变量的路径中末尾多写一个"/"不会有影响. 今天做实验时碰到一个情景,发现并不是这样. 环境:OEL 5.7 + Oracle 10.2.0. ...

  8. BPM应用开发解决方案分享

    一.需求分析企业整体管理是一个完整的体系,如果 把这个体系比做一个拼图,企业信息化通过各个业务系统覆盖了一部分业务. 企业通过采购实施通用软件的方式,覆盖了企业的核心业务和专业化业务然而系统只满足了部 ...

  9. [Android]使用Dagger 2来构建UserScope(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6237731.html 使用Dagger 2来构建UserSco ...

  10. centos下开启ftp服务

    如果要ftp访问linux需要安装ftp服务,vsftpd是Linux下比较好的的FTP服务器. 一.检查安装vsftp //检查是否安装vsftpd rpm -qa | grep vsftpd // ...