文档章节

第一讲:编写TCP Socket小程序

刘日辉
 刘日辉
发布于 05/21 20:47
字数 1323
阅读 282
收藏 0

根据下面的步骤编写TCP Socket小程序。注意:作者必须是自己的名字。结果如下:

步骤: 1、用VC建立服务器程序

 

创建一个win32控制台程序

 

上面的代码如下,编写代码的时候切换到FileView界面,其中StdAfx.cpp文件不用编辑,直接点击“编译”-->“链接“图标就可以了:

注意必须要先编译、链接这个文件,否则后面会报错。

我们需要在TServer.cpp代码里面进行编辑

 

TServer.cpp代码如下:

服务器端运行效果,记得设置防火墙允许访问:

二、编写客户端,重开另外一个VC++6.0程序(不要在同一个VC++6.0程序里面新建两个工程),新建TClient工程(没截图,所有用旧图,把下面的工程名称TServer改成TClient)

勾选一个简单的应用程序

编写客户端的代码,如下:

注:上面一行的 return 0;紧接着的是大括号}。如下:

      return 0;

}

运行效果(必须先开启服务器端):

1、先开启服务器端;

2、开启客户端。

 

最后看代码得知TCP编程步骤:

TCP编程的服务器端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt(); * 可选步骤
  3、绑定IP地址、端口等信息到socket上,用函数bind(); 
  4、开启监听,用函数listen(); 
  5、接收客户端上来的连接,用函数accept(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接; 
  8、关闭监听; 

TCP编程的客户端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 步骤
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 步骤
  4、设置要连接的对方的IP地址和端口等属性; 
  5、连接服务器,用函数connect(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接;

上面的函数send()和recv(),或者read()和write()的区别是:

一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。
由此网络程序里最基本的函数就是read和write函数了。

写函数write
ssize_t write(int fd, const void*buf,size_t nbytes);
write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 
读函数read
ssize_t read(int fd,void *buf,size_t nbyte)
read函数是负责从fd中读取内容.当读成功 时,read返回实际所读的字节数,如果返回的值是0 表示已经读到文件的结束了,小于0表示出现了错误.如果错误为EINTR说明读是由中断引起 的, 如果是ECONNREST表示网络连接出了问题. 
recv和send
recv和send函数提供了和read和write差不多的功能.不过它们提供了第四个参数来控制读写操作.
int recv(int sockfd,void *buf,int len,int flags)
int send(int sockfd,void *buf,int len,int flags)
前面的三个参数和read,write一样,第四个参数可以是0或者是以下的组合
_______________________________________________________________
| MSG_DONTROUTE | 不查找表 |
| MSG_OOB | 接受或者发送带外数据 |
| MSG_PEEK | 查看数据,并不从系统缓冲区移走数据 |
| MSG_WAITALL | 等待所有数据 |
|--------------------------------------------------------------|
MSG_DONTROUTE:是send函数使用的标志.这个标志告诉IP.目的主机在本地网络上面,没有必要查找表.这个标志一般用网络诊断和路由程序里面.
MSG_OOB:表示可以接收和发送带外的数据.关于带外数据我们以后会解释的.
MSG_PEEK:是recv函数的使用标志,表示只是从系统缓冲区中读取内容,而不清除系统缓冲区的内容.这样下次读的时候,仍然是一样的内容.一般在有多个进程读写数据时可以使用这个标志.
MSG_WAITALL是recv函数的使用标志,表示等到所有的信息到达时才返回.使用这个标志的时候recv回一直阻塞,直到指定的条件满足,或者是发生了错误. 1)当读到了指定的字节时,函数正常返回.返回值等于len 2)当读到了文件的结尾时,函数正常返回.返回值小于len 3)当操作发生错误时,返回-1,且设置错误为相应的错误号(errno).如果flags为0,则和read,write一样的操作.还有其它的几个选项,不过我们实际上用的很少,可以查看 Linux Programmer's Manual得到详细解释。

视频下载链接:

链接:https://pan.baidu.com/s/1_EMW1AtiqlvqZUY47jD5Mg 
提取码:bmhv 
复制这段内容后打开百度网盘手机App,操作更方便

© 著作权归作者所有

刘日辉
粉丝 9
博文 27
码字总数 26322
作品 0
南宁
项目经理
私信 提问
Python基础教程,第十五讲,网络编程(一)Socket详解

网络编程的重要性不低于数据库操作,而且两者通常是同时存在,比如用python写一个爬虫程序,最终抓取的数据保存入库,写了一个web项目,用户注册,登录,提交订单等数据最终也要保存到我们的...

程序员补给栈
01/25
0
0
Linux多线程并发服务器编程(线程池,FTP服务器)

分享网盘下载:https://pan.baidu.com/s/1gfNCcXt 密码: irfk 内容简介 本课程从最基础的进程、线程概念讲起逐步深入,通过理论与实践结合的方式,使学员快说掌握linux多线程网络编程技术,并...

人气王子333
2018/06/26
0
0
C#网络编程系列文章(一)之Socket实现异步TCP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编...

zhujunxxxxx
2015/03/14
0
0
Android NDK开发之旅34--Linux&Android平台下Socket编程

Android NDK开发之旅 目录 前言 我们做前端开发主要用http/https请求,这种请求从数据更新角度是单向的,即用户发起请求才能获取到最新数据。但有时候,一些状态和数据的变更要及时推送到前端...

香沙小熊
2018/01/08
0
0
Android一个线程内连接多个tcp服务端

通常情况下我们客户端开启tcp去连接服务器都是一个连接一个线程;这样写代码也是比较easy的 使用就只需要启动这个线程即可,这样就可以一直接收服务器端发送过来的数据了。如果你有多个服务器...

a_zhon
2017/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

揭秘阿里云背后神秘而富有能量的一群人

作为某创业公司CTO兼CTO兼CFO,带领众子弟行走于云端计算,累计犒赏已达757157.09银两,江湖人称紫龙,就是众多阿里云大使中低调内敛的一位。其话不多,一个典型的技术男,但又热心钻研传播推...

阿里云云栖社区
22分钟前
1
0
深入浅出Mybatis系列(一)---Mybatis源码分析环境准备

Mybatis源码分析环境准备 源码下载地址: https://blog.mybatis.org/p/products.html 把下载好多源码导入idea 之后可以在Test包下进行源码分析 这里我们就把源码分析的环境准备好了,下一篇文...

须臾之余
38分钟前
0
0
使用JDK的观察者接口进行消息推送

观察者模式就是对对象内部的变化进行观察,当发生改变时做出相应的响应。代码样例见 设计模式整理 ! 因为观察者模式较为重要,使用频率较高,JDK早已经提供了内置的观察者接口以及被观察者父...

算法之名
47分钟前
14
0
supervisor的配置与laravel php artisan queue:work的配置

安装环境 centos 7.2 安装supervisor easy_install supervisor echo_supervisord_conf > /etc/supervisord.conf 配置supervisor 如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20......

bengozhong
52分钟前
2
0
DevExpress Winforms Controls:安装使用系统要求文档

【DevExpress WinForms v19.1下载】 本文档包含了有关安装和使用DevExpress WinForms控件的系统要求信息。 .NET Framework 下图展示了支持的.NET Framework版本。 Microsoft已发布.NET Fram...

FILA6666
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部