基于TCP的网络编程

服务器端程序:

#include <Winsock2.h>
#include <stdio.h>

#pragma comment( lib, "Wsock32.lib" )            //加入lib库

void main()
{
    //加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    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 sockSrv = socket( AF_INET,SOCK_STREAM,0 );

    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = htonl( INADDR_ANY );
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons( 6000 );

    //绑定套接字
    bind( sockSrv,(SOCKADDR*)&addrSrv,sizeof( SOCKADDR ) );
    //将套接字设为监听模式,准备接受客户请求
    listen( sockSrv,5 );

    SOCKADDR_IN addrClient;
    int len = sizeof( SOCKADDR );

    while ( 1 ){
        //等待客户请求到来
        SOCKET sockConn = accept( sockSrv,(SOCKADDR*)&addrClient,&len );
        char sendBuf[100];
        sprintf( sendBuf,"Welcome %s to http://www.sunxin.org",inet_ntoa( addrClient.sin_addr ) );
        //发送数据
        send( sockConn,sendBuf,strlen( sendBuf )+1,0 );
        char recvBuf[100];
        //接受数据
        recv( sockConn,recvBuf,100,0 );
        //打印接受的数据
        printf( "%s\n",recvBuf );
        //关闭套接字
        closesocket( sockConn );
    }
}

客户端程序:

#include <Winsock2.h>
#include <stdio.h>

#pragma comment( lib, "Wsock32.lib" )            //加入lib库

void main()
{
    //加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    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 );

    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = inet_addr( "127.0.0.1" );
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons( 6000 );

    //向服务器发出连接请求
    connect( sockClient,(SOCKADDR*)&addrSrv,sizeof( SOCKADDR ) );

    //接收数据
    char recvBuf[100];
    recv( sockClient,recvBuf,100,0 );
    printf( "%s\n",recvBuf );

    //发送数据
    send( sockClient,"This is lisi",strlen( "This is lisi" )+1,0 );

    //关闭套接字
    closesocket( sockClient );
    WSACleanup();
}

先启动服务器端程序,在运行客户端程序。连接之后接收服务器发来的欢迎信息,在发给位于本机6000端口的服务器程序一条信息“This is lisi”。

时间: 2024-10-28 04:15:26

基于TCP的网络编程的相关文章

(1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将数据的传递从逻辑上划分为以下七层: 应用层.表示层.会话层.传输层.网络层.数据链路层.物理层. 在发送数据之前要按照上述七层协议从上到下一层一层进行加包处理,再发送出去; 在接收数据之后要按照上述七层协议从下到上一层一层进行拆包处理,再解析出来: 1.2 常用的协议(熟悉) http协议 - 超文

TCP/IP网络编程之基于TCP的服务端/客户端(二)

回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c --while ((str_len = read(clnt_sock, messag, 1024)) != 0) write(clnt_sock, messag, str_len);-- 接着,我们回顾客户端的代码 echo_client.c -- wr

【TCP/IP网络编程】:06基于UDP的服务器端/客户端

本篇文章简单描述了UDP传输协议的工作原理及特点. 理解UDP UDP和TCP一样同属于TCP/IP协议栈的第二层,即传输层. UDP套接字的特点 UDP的工作方式类似于传统的信件邮寄过程.寄信前应先在信封上填好寄信人和收信人的地址,之后贴上邮票放进邮筒即可.当然信件邮寄过程可能会发生丢失,我们也无法随时知晓对方是否已收到信件.也就是说信件是一种不可靠的传输方式,同样的,UDP所提供的也是一种不可靠的数据传输方式(以信件类比UDP只是通信形式上一致性,之前也以电话通信的方式类比了TCP的通信方式

《TCP/IP网络编程》

<TCP/IP网络编程> 基本信息 作者: (韩)尹圣雨 译者: 金国哲 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115358851 上架时间:2014-6-19 出版日期:2014 年6月 开本:16开 页码:1 版次:1-1 所属分类:计算机 > 计算机网络 > 网络协议 > TCP/IP 更多关于>>><TCP/IP网络编程> 编辑推荐 为初学者准备的网络编程 本书涵盖操作系统.系统编程.TCP/IP协议等多种

TCP/IP网络编程系列之二

套接字类型与协议设置 我们先了解一下创建套接字的那个函数 int socket(int domain,int type,int protocol);成功时返回文件描述符,失败时返回-1.其中,domain是套接字使用中的协议族(Protocol Family)信息.type套接字类型里面的数据传输类型信息.protocol计算机通信中使用的协议信息. 协议族(Protocol Family) 协议族类型有: PE_INET IPV4 PE_INET6 IPV6 PF_LOCAL 本地通信的UNI

TCP/IP网络编程系列之一

概述 网络编程实际上就是编写程序使两台联网的计算机相互的交换数据.操作系统会提供名为“ 套接字 ”的部件.套接字是网络数据传输的软件设备,即使对网络数据传输原理不太熟悉也无关紧要.我们也能通过套接字完成数据传输,因此网络编程又叫套接字编程. 过程  我们可以把套接字理解为我们平时的电话机,我们先看一下套接字的创建过程: 首先你如果要和别人沟通肯定要安装好电话机才可以,所以对应套接字的是调用socket函数时进行对话. #include<sys/socket.h> int socket(int

TCP/IP网络编程系列之四(初级)

TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的套接字.在了解TCP之前,先了解一下TCP所属的TCP/IP协议栈. 如图所示,TCP/IP协议栈共分为4层,可以理解成数据收发分成了4个层次化过程. 链路层 它是物理链接领域标准化结果,也是最基本的领域,专门定义LAN.WAN.MAN等网络标准.若两台计算机通过网络进行数据交换,链路层就负责整个物

TCP/IP网络编程系列之二(初级)

套接字类型与协议设置 我们先了解一下创建套接字的那个函数 int socket(int domain,int type,int protocol);成功时返回文件描述符,失败时返回-1.其中,domain是套接字使用中的协议族(Protocol Family)信息.type套接字类型里面的数据传输类型信息.protocol计算机通信中使用的协议信息. 协议族(Protocol Family) 协议族类型有: PE_INET IPV4 PE_INET6 IPV6 PF_LOCAL 本地通信的UNI

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introduction/ netty是基于NIO实现的异步事件驱动的网络编程框架,学完NIO以后,应该看看netty的实现,netty框架涉及的内容特别多,这里只介绍netty的基本使用和实现原理,更多扩展的内容将在以后推出. 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎