//网络套接字编程实例,服务器端,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. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  2. iOS系列文章

    本博客全为原创,如果借鉴了其他文章会在博文的下面进行说明.欢迎转载,但要在文章中给出原文链接,谢谢. 有链接的说明已经发布,没有链接的说明还没有发布. 并不是所有的博文都在这里罗列,有兴趣的可以看博客 ...

  3. SQL Server常见数据类型介绍

    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...

  4. SQL Server-聚焦UNIOL ALL/UNION查询(二十三)

    前言 本节我们来看看有关查询中UNION和UNION ALL的问题,简短的内容,深入的理解,Always to review the basics. 初探UNION和UNION ALL 首先我们过一遍 ...

  5. .Net Core上也可以使用的二维码组件

    我Fork了QRCoder,并且兼容了.Net Core,图形库用的是ZKWeb.System.Drawing Github: https://github.com/zkweb-framework/Q ...

  6. php注册审核

    通过注册审核,判断刚创建的账户是否可以使用. 后台管理员审核通过后,账号可以使用. 通过session 设置只能通过登录入口进入网页. 原理:通过数据库设置账号的一个字段状态,例: isok:1, i ...

  7. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  8. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  9. Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .

    例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...

  10. Dynamics CRM 2015-Data Encryption激活报错

    在CRM的日常开发中,Data Encryption经常是不得不开启的一个功能.但是有时,我们可能遇到一种情况,Organization导入之后,查看Data Encryption是已激活的状态,但是 ...