根据下面的步骤编写TCP Socket小程序。注意:做者必须是本身的名字。结果以下: 编程
步骤: 一、用VC创建服务器程序小程序
建立一个win32控制台程序服务器
上面的代码以下,编写代码的时候切换到FileView界面,其中StdAfx.cpp文件不用编辑,直接点击“编译”-->“连接“图标就能够了:网络
注意必需要先编译、连接这个文件,不然后面会报错。socket
咱们须要在TServer.cpp代码里面进行编辑tcp
TServer.cpp代码以下:函数
服务器端运行效果,记得设置防火墙容许访问:spa
2、编写客户端,重开另一个VC++6.0程序(不要在同一个VC++6.0程序里面新建两个工程),新建TClient工程(没截图,全部用旧图,把下面的工程名称TServer改为TClient)视频
勾选一个简单的应用程序blog
编写客户端的代码,以下:
注:上面一行的 return 0;紧接着的是大括号}。以下:
return 0;
}
运行效果(必须先开启服务器端):
一、先开启服务器端;
二、开启客户端。
最后看代码得知TCP编程步骤:
TCP编程的服务器端通常步骤是:
一、建立一个socket,用函数socket();
二、设置socket属性,用函数setsockopt(); * 可选步骤
三、绑定IP地址、端口等信息到socket上,用函数bind();
四、开启监听,用函数listen();
五、接收客户端上来的链接,用函数accept();
六、收发数据,用函数send()和recv(),或者read()和write();
七、关闭网络链接;
八、关闭监听;
TCP编程的客户端通常步骤是:
一、建立一个socket,用函数socket();
二、设置socket属性,用函数setsockopt();* 可选 步骤
三、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 步骤
四、设置要链接的对方的IP地址和端口等属性;
五、链接服务器,用函数connect();
六、收发数据,用函数send()和recv(),或者read()和write();
七、关闭网络链接;
上面的函数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,操做更方便