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)关闭套接字,释放资源。

还没有写数据报,等等

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

如何判断socket客户端断开

我写了一个socket的客户端和服务器端,请问服务器端如何判断客户端已经断开连接了如果客户端结束进程,会发出FIN,但是如果是网线拨了,服务器就不知道了。借楼主的贴讨论一下:1.如果拨掉网线的时候服务...

多线程的生产者和消费者问题

多线程的生产者和消费者问题是比较经典的多线程问题,如果知道编码解决生产者和消费者问题,那么对于多线程应该基本算掌握了。我不知道大家的生产者和消费者问题是怎么样的(应该有几个版本吧),这里我说下我的生产...

网络编程 ip数据报分析流程

  • 2011年09月08日 12:55
  • 252KB
  • 下载

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网络编程-TCP/IP基础(三)IP数据报格式、网际校验和、路由

一、IP数据报格式 (1)、IP头部的数据格式 版本  IP协议版本号,长度为4位,IPv4此字段值为4,IPv6此字段值为6 首部长度  以32位的字为单位,该字段长度为4...
  • tianttt
  • tianttt
  • 2015年05月01日 21:13
  • 527

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

http://blog.csdn.NET/jnu_simba/article/details/8957242 一、ISO/OSI参考模型 OSI(open system i...

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

IP 数据报首部 TCP/IP 协议定义了一个在因特网上传输的包,称为 IP 数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,由首部和数据两部...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket的流编程和数据报编程
举报原因:
原因补充:

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