基于TCP/IP协议的C++网络编程(API函数版)

简介: 源代码:http://download.csdn.net/detail/nuptboyzhb/4169959 基于TCP/IP协议的网络编程 定义变量——获得WINSOCK版本——加载WINSOCK库——初始化——创建套接字 ——设置套接字选项——关闭套接字——卸载WINSOCK库——释放所有资源 整个程序架构分为两大部分,服务器端客户端。

源代码:http://download.csdn.net/detail/nuptboyzhb/4169959

基于TCP/IP协议的网络编程

定义变量——获得WINSOCK版本——加载WINSOCK——初始化——创建套接字 ——设置套接字选项——关闭套接字——卸载WINSOCK——释放所有资源

整个程序架构分为两大部分,服务器端客户端。

服务器SOCKET程序流程:

socket()→bind()→listen→accept()→recv()/send()→closesocket()

客户端:

socket→bind()→connect()→send()/recv()→closesocket()

 

编程举例:

约定发送消息的格式为如下结构体:

typedef struct

{

         int ID;

         char data[255];

}TcpMessage;

应用程序的头文件如下:

#include <winsock2.h>

#pragma comment(lib,"ws2_32")

#include <stdio.h>

端口号为:4500

服务器端:

1、  初始化:

         WSADATA wsaData;

    WORD sockVersion = MAKEWORD(2, 2);

         if(WSAStartup(sockVersion, &wsaData) != 0)

                   return 0;

2、  创建套接字:

         SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

         if(sListen == INVALID_SOCKET)

{

printf("socket error\n");

return 0;

}

3、  使套接字和本地地址绑定

// sockaddr_in结构中装入地址信息

         sockaddr_in sin;

         sin.sin_family = AF_INET;

         sin.sin_port = htons(4500); // htons函数将主机的无符号短整形数转换成网络

         //字节顺序

         sin.sin_addr.S_un.S_addr = INADDR_ANY;

if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)

         {

                   printf(" bind error \n");

                   closesocket(sListen);

                   return 0;

         }

4、监听端口

         if(listen(sListen, 5) == SOCKET_ERROR)

         {

                   printf("listen error\n");

                   closesocket(sListen);

                   return 0;

         }

5、等待接受连接,(如无连接,一直等待)

SOCKET sClient;//用于保存accept返回的套接字

sClient = accept(sListen,0,0);//accept函数调用失败则继续等待连接。

if(sClient == INVALID_SOCKET)

{

                            printf("accept() error");

         }

6、用第5步中accept函数返回的套接字进行收发通信

 6.1、接收:(如果没有接到,会等待!

      TcpMessagerevData;//定义接收消息的结构体变量

      int ret=recv(sClient,(char *)&revData,sizeof(revData),0);

      if(ret>0)//说明,收到字节

      {

         switch (revData.ID)//对不同的ID,可以有不同的反应

{

   case 1:

   ……..

case 2:

……..

}

}

 6.2、发送:

      TcpMessage sendData;

           memset((char*)&sendData,0,sizeof(sendData));//初始化为0

      sendData.ID=1;//ID成员变量赋值

      strcpy(sendData.data,"\r\n..要发送的字符信息 ");

      if(send(sClient,(char*)&sendData,sizeof(sendData),0)==SOCKET_ERROR)

           {

                   char error[10];

                   int errorcode=WSAGetLastError();

                   itoa(errorcode,error,10);

                   MessageBox(NULL,error,"发送失败,错误码为:",MB_OK);

                   printf("send error!");

           }

7、关闭

         closesocket(sClient);//accept生成的套接字

         closesocket(sListen);//服务端套接字

         WSACleanup();

客户端

1、   初始化

WSADATA wsaData;

WORD sockVersion = MAKEWORD(2, 2);

       if(WSAStartup(sockVersion, &wsaData) != 0)

                        return 0;

2、   创建套接字

SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

          if(sClient == INVALID_SOCKET)

          {

                   printf("socket error\n");

                   return 0;

       }

3、   使套接字和本地地址绑定

// sockaddr_in结构中装入服务器端地址信息

          sockaddr_in servAddr;

          servAddr.sin_family = AF_INET;

          servAddr.sin_port = htons(4500);// htons函数将主机的无符号短整形数转换成网络

          //字节顺序,4500端口为要连接服务器端的端口

       servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服务器端ip

4、   连接服务器

          if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)

          {

                   printf("connect error\n");

                   closesocket(sClient);

                   return 0;

       }

//注意,要先把服务器打开,否则连接失败

5、   收发通信

sendrecv函数,这一点和服务器端一样

6、   关闭

closesocket(sClient);//客户端只有一个连接套接字

          WSACleanup();

目录
相关文章
|
域名解析 网络协议 安全
计算机网络TCP/IP四层模型
本文介绍了TCP/IP模型的四层结构及其与OSI模型的对比。网络接口层负责物理网络接口,处理MAC地址和帧传输;网络层管理IP地址和路由选择,确保数据包准确送达;传输层提供端到端通信,支持可靠(TCP)或不可靠(UDP)传输;应用层直接面向用户,提供如HTTP、FTP等服务。此外,还详细描述了数据封装与解封装过程,以及两模型在层次划分上的差异。
2531 13
|
人工智能 缓存 自然语言处理
构建智能天气助手:基于大模型API与工具函数的调用实践
在人工智能快速发展的今天,大语言模型(LLM)已经成为构建智能应用的重要基础设施。本文将介绍如何利用大模型API和工具函数集成,构建一个能够理解自然语言并提供精准天气信息的智能助手。
5139 11
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
1333 5
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
1629 3
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
2506 2
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
431 13
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
537 0
|
网络协议 Java 程序员
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
854 2
|
网络协议 网络架构
【网络】TCP/IP 五层网络模型:数据链路层
【网络】TCP/IP 五层网络模型:数据链路层
455 1