Socket的一些小结

Socket

  • socket数据传输其实就是一种特殊的I/O。

  • 服务端在8088上监听,然后生成一个新的socket与client通讯。(服务端监听端口是不变的,但socket连接可以一直生成,一个线程对应一个socket)在一个端口监听,但是在监听端口的同时,生成一个等待队列,每一个来自客户端的连接都会送入等待队列中,服务器利用一定的算法进行选择相应的连接请求处理,所以在一个端口可以监听多各请求嘛。如果同时的连接过多,服务器相应每个连接的时间就会相应的变长。就会变慢。

  • client的端口是不需要指定的。Sever绑定端口,然后监听,client使用server的IP和端口建立socket。

  • 建立连接的过程大致分为以下几步

    • 1.建立Socket套接字
    • 2.给套接字赋予地址,这个地址不是通常的网络地址概念
      • 2. 给套接字赋予地址。
        依照建立套接字的目的不同,赋予套接字地址的方式有两种:服务器端使用bind,客户端
        使用connetc。
      • 我们可以使用bind函数来为一个使用在服务器端历程中的套接字赋予通信的地址和端口。用赋予socket地址,就得使用一个数据结构来指定特定的socket地址。这个数据结构就是struct sockaddr。
      • 对于客户端来说是不会使用bind的,并不是不能用,但没什么意义。他们会通过connect函数来建立socket和socket地址之间的关系。其中的socket地址是它想要连接的
        服务器端的socket地址。在connect建立socket和socket地址两者关系的同时,它也在
        尝试着建立远端的连接。
    • 建立socket连接
      • 对于准备建立一个连接,服务器端要使用两个步骤:bind,listen;客户端一个步骤:

网络字节序与主机字节序

讲解:

1.主机字节序就是我们平常说的大端和小端模式
不同的CPU有不同的字节序类型,这些字节序是整数在内存中保存的顺序这个叫做主机序。引用标准的Big-Endian和litten-Endian
a)litten-Endian就是低位字节排放在内存的低地址位,高字节排放在内存的高地址位。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
c)htonl()函数 将主机数转换成无符号长整形的网络字节顺序。htonl,其实是host to network, l 的意思是返回类型是long
d)ntohl()函数,是将一个无符号长整形数从网络字节顺序转换为主机字节顺序,ntohl()返回一个以主机字节顺序表达的数。

socket编程总结

socket函数讲解

你可能感兴趣的:(Socket的一些小结)