socket的流编程和数据报编程

原创 2015年09月01日 21:58:01

     socket的基本概念:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。(百度百科)

     socket中传输数据时有两种套接字类型:流套接字和数据报套接字。

     1.流套接字编程解析和编程思路

        解析:服务器和客户端进行通行时,首先各自必须建立自己的套接字,建立连接后,对响应的套接字进行“写”和“读”操作,从而实现两者之间的数据传输。

       

        编程思路:  (1)在服务器端进程建立流套接字。 

                                     在选择网络类型时一般是AF_INET, 它代表因特网通信的意思. 在套接字类型中选择SOCK_STREAM,它表示流套接字。服务器端进程要优先于客户端启动。

                            (2)绑定本地地址到建立的套接字上,从而标识该套接字。

                                     注意标识绑定套接字的句柄、地址、长度等,便于客户端连接。在c语言中,用sockaddr_in来标识tcp/IP下的协议下的地址,这样的好处是能够将

                                      socketaddr_in强转换成sockaddr的结构。  

struct sockaddr_in {
__uint8_t	        sin_len;   
</pre></blockquote></blockquote><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><pre name="code" class="objc">sa_family_t	sin_family;//设置协议簇,设置成AF_INET,标识为网络通信
</pre></blockquote></blockquote><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><pre name="code" class="objc">in_port_t	        sin_port;  //指定服务端口
</pre></blockquote></blockquote><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><pre name="code" class="objc">struct	      in_addr sin_addr;//无符号长整型,将IP地址保存成一个4字节的数,选择INADDR_ANY允许服务器监听你主机计算机上每个应用网络接口上的客户机活
  
char	                sin_zero[8];////要传递的由协议决定的地址长度;填充字段,使之与sockaddr结构长度一样
};

                           (3)让套接字处于监听状态,而且能够接受客户端连接请求。

                           (4)客户端进程也调用socket的函数创建客户端套接字。

                           (5)客户端面向服务器端发出连接请求,建立一端的连接。

                           (6)服务器接受请求后,被堵塞服务进程函数会产生一个新的套接字和客户端套接字,并向客户发挥接受信号。

                           (7)当客户端的套接字收到服务器的接收信息,确定后客户端和服务器端建立连接,从而可以进行数据的“读” 和 “写” 操作。

                           (8)关闭套接字,释放资源。

还没有写数据报,等等

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux网络编程之TCP/IP基础(一):TCP/IP协议栈与数据报封装

一、ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardi...

Linux 网络编程——TCP 和 UDP 数据报格式详解

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP 报文段的报头有 10 个必需的字段和 1 个可选字段...

【Linux网络编程】IP 数据报格式详解

IP 数据报首部 TCP/IP 协议定义了一个在因特网上传输的包,称为 IP 数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,由首部和数据两部...

【Linux网络编程】TCP 和 UDP 数据报格式详解

TCP 报文格式 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 ...

数据报(UDP)套接字客户端/服务器编程

实现一个基本的数据报套接字客户端/服务器通信程序,客户端和服务器按如下步骤交互: (1)客户端向服务器发出日期时间请求字符串,如:%D %Y %A %T等。 (2)服务器从网络接收到日期时间请求字...

unix/linux编程实践教程:数据报编程

1. 简单的数据报编程 dgrecv.c:

sock_ev——linux平台socket事件框架(基于数据报的测试程序)

上一篇已经做过注释,这一篇直接上代码 /*****************************************************************************...

TCP流模式与UDP数据报模式

“TCP是一种流模式的协议,UDP是一种数据报模式的协议”,这句话相信大家对这句话已经耳熟能详~但是,“流模式”与“数据包模式”在编程的时候有什么区别呢?以下是我的理解,仅供参考! 1、TCP 打...
  • sooolo
  • sooolo
  • 2012-08-28 09:39
  • 2430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)