soekct实践编程

来源:互联网 发布:怎么安装php 编辑:程序博客网 时间:2024/05/29 03:21

问题一: 网络编程大小端问题

通信方面都会遇见大小端问题,网络也不例外,所以为了统一标准,规定网络统一用大端模式。

下面就是 机器本身数据转网络端模式,统一转回大端,函数内部会实现。

【程序中的地址端口就需要此函数】

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

 

问题二:connect: Connection refused拒绝连接、Cannot assign requested address无法分配请求的地址

一般情况下就是IP地址问题或者端口号问题

 

服务器端程序编写

  1. socket
  2. bind
  3. listen
  4. accept

注意:socket返回的fd叫做监听fd,是用来监听客户端的,不能用来和任何客户端进行读写;accept返回的fd叫做连接fd,用来和连接那端的客户端程序进行读写。accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们就要通过这个连接来和客户端进行读写操作,读写操作就需要一个fd,这个fd就由accept来返回了。

 

客户端程序编写

  1. socket
  2. connect

概念:端口号,实质就是一个数字编号,用来在我们一台主机中(主机的操作系统中)唯一的标识一个能上网的进程。端口号和IP地址一起会被打包到当前进程发出或者接收到的每一个数据包中。每一个数据包将来在网络上传递的时候,内部都包含了发送方和接收方的信息(就是IP地址和端口号),所以IP地址和端口号这两个往往是打包在一起不分家的。

 

客户端发送&服务器接收

服务器发送&客户端接收

探讨:如何让服务器和客户端好好沟通

  1. 客户端和服务器原则上都可以任意的发和收,但是实际上双方必须配合:client发的时候server就收,而server发的时候client就收
  2. 必须了解到的一点:client和server之间的通信是异步的,这就是问题的根源
  3. 解决方案:依靠应用层协议来解决。说白了就是我们server和client事先做好一系列的通信约定。

 

自定义应用层协议第一步:规定发送和接收方法

  1. 规定连接建立后由客户端主动向服务器发出1个请求数据包,然后服务器收到数据包后回复客户端一个回应数据包,这就是一个通信回合
  2. 整个连接的通信就是由N多个回合组成的。

自定义应用层协议第二步:定义数据包格式

  1. 常用应用层协议:http、ftp······
  2. UDP简介
原创粉丝点击