源代码: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、   收发通信

用send和recv函数,这一点和服务器端一样

6、   关闭

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

WSACleanup();

基于TCP/IP协议的C++网络编程(API函数版)的更多相关文章

  1. 读书笔记——网络编程与开发技术(3)基于TCP/IP协议的网络编程相关知识

    TCP/IP协议:数据链路层,网络层,传输层,应用层. IP地址分为5类:A类.B类.C类.D类.E类. (A类.B类.C类是基本类,D类多用于多播传送,E类为保留类.) "*"表 ...

  2. 标准C实现基于TCP/IP协议的文件传输

    上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...

  3. 标准C语言实现基于TCP/IP协议的文件传输

    TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下:  1.Socket系统调用  为了进行网络I/O,服务器和客户机两 ...

  4. 网络通信-在浏览器输入url,基于TCP/IP协议,浏览器渲染的解释

    知识点1: 网络模型 TCP/IP四层 和ISO七层模型 (统一省略后面层字.比如传输代表传输层) 知识点2: 在应用层中TCP建立连接,经历的三次握手协议 首先:,TCP协议是什么? 为什么要三次握 ...

  5. 【TCP/IP】之Java socket编程API基础

    Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助, 此文讲解Socket的基础编程.Socket用法:①.主要用在进程间,网络间通信. 文章目录如下: ...

  6. 基于TCP/IP协议的socket通讯server

    思路: socket必须要随项目启动时启动,所以需用Spring自带的监听器,需要保持长连接,要用死循环,所以必须另外起线程,不能阻碍主线程运行 1.在项目的web.xml中配置listener &l ...

  7. java实例练习——基于TCP/IP协议的多客户端通信

    先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...

  8. 基于TCP/IP协议的socket通讯client

    package com.ra.car.utils; import java.io.BufferedReader; import java.io.IOException; import java.io. ...

  9. 网络编程的基本概念,TCP/IP协议简介

    8.1.1 网络基础知识 计算机网络形式多样,内容繁杂.网络上的计算机要互相通信,必须遵循一定的协议.目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议. 网络编程的目的就是指直接或 ...

随机推荐

  1. 【OpenMesh】使用网格的属性和特征

    例子主要展示如何改变位置,法向量,颜色和纹理的数据类型. 在之前的指南中我们学习使用标准属性,通过调用适合的请求方法.不像自定义属性,用户通过传递数据类型到句柄来指定数据类型(比如,MyMesh::F ...

  2. RBAC - 基于角色的权限控制

    ThinkPHP中关于RBAC使用详解 自己的源码下载:百度网盘,thinkPHP文件夹下,RBAC文件夹. 重要的是,权限信息的写入函数等.在源码中能找到,Modules/Amin/Common/c ...

  3. SparkContext主构造函数代码提取

    这是阅读sparkContext类的代码做的一个笔记.阅读这个类的时候,主要的任务就是搞清楚sparkContext是怎么构造的,java.C#的class的初始化都是放在一个方法中的,而scala的 ...

  4. c++,虚函数

    1.在声明函数时,在最前加上virtual,则该函数就是函虚数,基类的虚函数被派生类继承后仍是虚函数.2.派生类中可以重写基类的虚函数.3.用指针访问重写的虚函数时,被访问的虚函数是指针指向的对象所属 ...

  5. BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

    一不小心速度就成了#1.... 这道题显然是求最长反链, 最长反链=最小链覆盖.最小链覆盖就是先做一次floyd传递闭包, 再求最小路径覆盖. 最小路径覆盖=N - 二分图最大匹配. 所以把所有点拆成 ...

  6. Win7 x64安装Paramiko出问题

    今天上午windows下配置paramiko环境时出现问题,随手记录下来.   先说一下我的环境: win7 x64 旗舰版.Python3.5.0.pip8.1.0 pip install para ...

  7. 从零搭建LNMP环境

    Linux就是环境所在的操作系统: Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/: MySQL则是一个方便地对数据进行增删改查的数据库管理系统, ...

  8. 转:git教程 ~~非常好的入门教程

    --------------------------------------- notes: cdmkdir dirnametouchls > filenamelsecho "this ...

  9. php启用gzip压缩

    GZIP(GNU-ZIP)是一种压缩技术.经过GZIP压缩后页面大小可以变为原来的30%甚至更小.这样用户浏览的时候就会感觉很爽很愉快! 要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服 ...

  10. Pencil OJ 01 开发的准备

    操作系统 ubuntu-12.04.5-desktop-amd64.iso 基本应用 Node 0.12.7 MongoDB 3.0.4 Robomongo 0.8.4 Atom 参考资料 OJ hu ...