基于linux系统的的tcp/ip网络编程的c语言的实现,基于TCP/IP协议的C++网络编程(API函数版)...

源代码: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

#pragma comment(lib,"ws2_32")

#include

端口号为: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、发送:

TcpMessagesendData;

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();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TCP/IP协议学习(五) 基于C# Socket的C/S模型

TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

随机推荐

test3

下面写几个示例:这是行内公式: \( e^{\pi i} + 1 = 0\) ,下面的是行间公式: \[ e^{\pi i} + 1 = 0. \] 另一个复杂的公式: $$J_\alpha (x) ...

UIView 周围出现黑线的解决方法

myView.clipsToBounds = YES;

PHP程序漏洞产生的原因和防范方法

滥用include 1.漏洞原因: Include是编写PHP网站中最常用的函数,并且支持相对路径.有很多PHP脚本直接把某输入变量作为Include的参数,造成任意引用脚本.绝对路径泄露等漏洞.看以 ...

玩转Web之servlet(四)---B/S是如何使用http协议完成通信过程的

在上一篇文章中,我简单的说了一下B/S架构的流程图,关于浏览器和服务器之间的通信过程知识含糊的说了一下,在这篇文章中我再总结一下B/S架构里是如何利用http协议去完成通信的. (一)通讯过程 1:浏 ...

Wpf之布局

Wpf之布局 上一章大家有了自己的一个Hello World的wpf程序,今天咱们就一起走进WPF,一起来看看wpF的前台xaml这门语言的魅力. 写过web 的人都知道布局这个概念,在web中布局和 ...

让 ComboBox 的每个栏目显示不同颜色

在一般的应用程式中,使用 ComboBox 提供下拉选单的功能,让使用者选择不同项目,一般而言, ComboBox 的项目没有什么特别的,但在特定的应用程式中,有时候会希望每个项目有一些效果呈现,例如 ...

皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)

Pearson's r,称为皮尔逊相关系数(Pearson correlation coefficient),用来反映两个随机变量之间的线性相关程度. 用于总体(population)时记作ρ (rh ...

CMDB服务器管理系统【s5day90】:获取今日未采集主机列表

1.目录结构 1.服务器端 2.客户端 2.具体代码如下 1.数据库增加两个字段 class Server(models.Model): """ 服务器信息 " ...

vs启动出错(chenlu-1):参数“basePath”不能是相对路径

参数“basePath”不能是相对路径 原因: 1.调试路径下没有exe文件.没有生成exe文件. 2.项目属性->配置属性->调试->命令中的参数被设置为相对路径.

Trips CodeForces - 1037E(思维dfs)

题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值