【tcp-ip学习总结】使用tcp协议实现简单的通信小程序

环境:vs2013

server.c

#include<Winsock2.h>
#include<stdio.h>
#pragma comment(lib,"Ws2_32.lib")
#include<stdlib.h>

void main()
{
    WSADATA wsaData;//协议栈
    struct sockaddr_in server, client;//服务端和客户端的地址
    int iLen;
    char recMessage[1024]; //接受字符串缓冲区
    SOCKET sAccept;//连接上来的那个客户端套接口
    memset(recMessage, 0, sizeof(recMessage));//将接收缓冲区内容全部变为0

    printf("-------------------------\n");
    printf("服务器在等待\n");
    printf("-------------------------\n");
    /*
        检查协议栈是否加载成功
    */
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        printf("协议栈加载失败!\n");
        return;
    }
    //创建服务器端套接口
    SOCKET sListen = socket(AF_INET, SOCK_STREAM, 0);

    if (sListen == INVALID_SOCKET)
    {
        printf("sListen套接口创建失败!\n");
        return;
    }
    //为server端地址赋值
    server.sin_family = AF_INET;
    server.sin_port = htons(8888);
    server.sin_addr.s_addr = htonl(INADDR_ANY);

    //将服务端地址和服务端socket套接口绑定到一起
    if (bind(sListen, (LPSOCKADDR)&server, sizeof(server)) == SOCKET_ERROR)
    {
        printf("绑定失败!\n");
        return;
    }
    //开始监听
    if (listen(sListen, 5) == SOCKET_ERROR)
    {
        printf("监听失败!\n");
        return;
    }
    //客户端地址长度
    iLen = sizeof(client);
    while (1)
    {
        //得到连接上来的那个客户端套接口
        sAccept = accept(sListen, (struct socketaddr*)&client, &iLen);
        if (sAccept == INVALID_SOCKET)
        {
            printf("接受失败!");
            break;
        }

        printf("接受的客户端的地址IP是:[%s], port[%d]\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
        //接收数据
        while (1)
        {
    //从这个客户端套接口上面接收信息
            int recLen = recv(sAccept, recMessage, sizeof(recMessage), 0);

            if (recLen == 0)
                return;
            else if (recLen == SOCKET_ERROR)
            {
                printf("接收失败!\n");
            }
            printf("沸沸腾:%s\n", recMessage);
        }

    }
    closesocket(sAccept);//关闭套接口
    closesocket(sListen);
    WSACleanup();//清空协议栈
}

client.c

#include<Winsock2.h>
#include<stdio.h>
#pragma comment(lib,"Ws2_32.lib")
#include<stdlib.h>

void  main()
{
    WSADATA wsaData;//协议栈
    struct sockaddr_in server;//server端的地址情况
    SOCKET sClient;//客户端套接口

//加载协议栈
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        printf("协议栈加载失败!\n");
        return;
    }
//初始化服务器端的地址,与端口情况
    server.sin_family = AF_INET;
    server.sin_port = htons(8888);
    server.sin_addr.s_addr = inet_addr("172.17.152.206");
    //创建一个tcp的套接口
    sClient = socket(AF_INET, SOCK_STREAM, 0);

    if (sClient == INVALID_SOCKET)
    {
        printf("套接口创建失败!\n");
        return;
    }
    //向服务器端申请连接
    if (connect(sClient, (struct sockaddr*)&server, sizeof(server)) == INVALID_SOCKET)
    {
        printf("连接失败!\n");
        return;
    }

    for (int i = 0; i < 5; i++)
    {
        printf("田腾飞: ");
        char message[1024];
        gets_s(message,1024);
        //向客户端套接口发送数据
        int iSend = send(sClient, message, sizeof(message), 0);
        if (iSend == SOCKET_ERROR)
        {
            printf("发送失败!\n");
            break;
        }
        else if (iSend == 0)
            break;
        else
        {
            printf("发送成功!\n");
        }

    }

    closesocket(sClient);//关闭套接口
    WSACleanup();//清楚协议栈
}
时间: 2024-10-28 21:28:45

【tcp-ip学习总结】使用tcp协议实现简单的通信小程序的相关文章

ICMP和arp协议以及tcp/ip学习

ICMP:http://blog.csdn.net/tigerjibo/article/details/7356936 ARP:http://blog.csdn.net/tigerjibo/article/details/7351992 IP分片:http://www.vants.org/?post=106 TSO/GSO linux内核源码剖析 udp: http://modernrobber.blog.163.com/blog/static/214636320074305183395/ ht

TCP/IP学习笔记(3)-----------TCP/IP协议详解

1.TCP/IP协议栈 四层模型 TCP/IP这个协议遵守一个四层的模型概念:应用层.传输层.互联层和网络接口层. 网络接口层 模型的基层是网络接口层.负责数据帧的发送和接收,帧是独立的网络信息传输单元.网络接口层将帧放在网上,或从网上把帧取下来. 互联层 互联协议将数据包封装成internet数据报,并运行必要的路由算法. 这里有四个互联协议: 网际协议IP:负责在主机和网络之间寻址和路由数据包. 地址解析协议ARP:获得同一物理网络中的硬件主机地址. 网际控制消息协议ICMP:发送消息,并报

TCP/IP的三次握手协议

关于TCP/IP的三次握手协议,这篇文章中有详细的介绍,很通俗易懂,什么时候忘了,都可以过来瞧两眼,保证很快就明白了. 首先TCP/IP协议分为三个阶段:建立连接(握手阶段),数据传输阶段,连接终止阶段. 看到以前学习的<计算机网络>课本,书上介绍,数据传输阶段的时候,突然想到QQ或者阿里旺旺是不是采用TCP/IP协议进行聊天的, 发现阿里旺旺应该是采用TCP/IP协议,但是QQ是采用UDP协议进行聊天的,采用TCP协议进行保持登录状态的.关于QQ采用的协议,可以参考这篇知乎问答 关于他们具体

TCP/IP学习笔记(1)----------详解

TCP/IP协议 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成.TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准.协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求.通俗而言:TCP负责发现传输的问题,一有问题就发出信号,

TCP/IP学习笔记(三)——IP,ARP,RARP

参考文献: * <TCP/IP详解 卷一:协议>: 1. IP网际协议 1.1 特点: 不可靠:不能保证IP数据报能成功到达目的地: 无连接:不维护任何关于后续数据报状态信息,即没有握手的环节,比如UDP也是无连接的: 1.2 IP首部 普通IPv4首部长度20字节(除非含有选项字段): 网络字节序:Big-endian: 服务类性(TOS):共8位,实际有效位4bit,最小时延,最大吞吐量,最高可靠性,最小费用: 不同的协议有不同的要求:Telnet和Rlogin用于少量交互数据要求最小传输

[TCP/IP详解卷1:协议] Chapter2.链路层

链路层三个目的:(TCP/IP支持各种链路层协议:以太网,令牌环网,光纤分布式数据接口.etc) (1)为IP模块收发IP数据包. (2)为ARP模块发送ARP请求和接受ARP应答. (3)为RARP发送RARP请求和接受RARP应答. 以太网 以太网是当今TCP/IP采用的主要局域网技术.使用CSMA/CD媒体接入方法. 802.2定义802网络共有的逻辑链路控制. 802.3针对整个CSMA/CD网络. 802.4针对令牌总线网络. 802.5针对令牌环网络. 原文地址:https://ww

TCP/IP解析(一):TCP/IP的工作方式

本文包含以下内容: 1.TCP/IP协议系统 2.OSI模型 3.数据包 4.TCP/IP的交互方式 1.TCP/IP模型的协议层 分为四层: 网络访问层:提供与物理网络连接的接口.根据硬件的物理地址实现数据寻址. 网际层:提供独立于硬件的逻辑寻址. 传输层:为网络提供流量控制.错误控制和确认服务,充当网络应用程序的接口. 应用层:为文件传输.远程控制等提供应用程序. OSI七层模型 物理层:把数据转换为传输介质上的电子流或模拟脉冲,并监视数据的传输. 数据链路层:提供与网络适配器相连的接口,维

图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用

?图解?TCP/IP? 第六章?TCP与UDP? ?笔记6.1 传输层的作用 ? 传输层必须指出这个具体的程序,为了实现这一功能,使用端口号这样一种识别码.根据端口号,就可以识别在传输层上一层的应用程序所有进行处理的具体程序. ? 6.1.1 传输层定义 6.1.2 通信处理 ? 6.1.3 两种传输层协议 TCP和UDP TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,你可以把它想象成排水管道中的水流. UDP 是不具有可靠性的数据包协议 .细微的处理会交给上层的应用去完成.在U

java学习的一些预备知识和一些简单的java小程序

1先了解一些基本的dos命令 dir     ·列出当前目录下的文件和文件夹 md      创建文件夹 rd        删除文件夹(文件下没有子文件) del "文件夹名"    可以删除带子文件的文件夹 cd..    使文件夹目录一层一层后退 cd\    回到根目录 haha>1.txt    创建文档,并将haha写入到1.txt文档中 del 1.txt    删除文件(不走回收站) del  *.txt    只删除txt文件 exit    退出命令行 set