A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© shilu 中级黑马   /  2015-10-16 21:23  /  241 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

网络编程:Socket编程

网络编程三要数:
        IP地址
        端口
        协议[TCP\ UDP]
       
---------------------------
IP地址: 所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址
        IPV4: 32 bit地址
        IPV6: 128 bit地址

ip地址的分类:
       
A类        1.0.0.1---127.255.255.254
B类        128.0.0.1---191.255.255.254
C类        192.0.0.1---223.255.255.254
D类        224.0.0.1---239.255.255.254        
E类        240.0.0.1---247.255.255.254

xxx.xxx.xxx.0 网络地址
xxx.xxx.xxx.255 广播地址
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1   
DOS命令 ipconfig:查看本机IP地址

IP地址的组成
        IP地址 = 网络号码+主机地址
       
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
        255*255*255= 16581375
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
        255*255= 65535
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
        255
----------------------------------
udp:
        面向无连接。
        不可靠。
        速度快。
        将数据封包传输,数据包最大64k。
        举例:
        聊天留言,在线视频,视频会议,发短信,邮局包裹。

tcp:
        面向连接。
        安全可靠
        效率稍低。
        通过三次握手确保连接的建立。
        举例:
        下载,打电话,QQ聊天(你在线吗,在线,就回应下,就开始聊天了)

----------------------------
* UDP协议的发送端
*
* 步骤:
*         1,创建Socket对象
*                 DatagramSocket: 此类表示用来发送和接收数据报包的套接字。
*
*         2,指定要发送的数据
*                 byte[] buf
*         3,要发送的数据打包
*                 DatagramPacket: 数据报包用来实现无连接包投递服务
*                 DatagramPacket(byte[] buf, int length, InetAddress address, int port)
                 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
*         4,通过Socket对象,发送数据
*                 public void send(DatagramPacket p) throws IOException从 此套接字发送数据报包
*
*         5,关闭Socket对象
----------
* UDP协议的接收端
*
* 步骤:
*         1,创建接收端的Socket对象
*                 DatagramSocket: 此类表示用来发送和接收数据报包的套接字。
*                 DatagramSocket(int port)
*
*  2,创建空的数据报包(空的仓库)
*          DatagramPacket
*          DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包
*  
*  3,接收发送过来的数据,存储到空的数据报包(空的仓库)
*          public void receive(DatagramPacket p) throws IOException从此套接字接收数据报包       
*  
*  4,获取接收到的数据报包中的内容
*          ip地址,数据内容
*  
*          DatagramPacket类中的方法
*          public InetAddress getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
*          public int getPort()返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的
*          public byte[] getData() 返回数据缓冲区。
*          public int getLength()返回将要发送或接收到的数据的长度。
-----------------------------------------------------
* TCP协议的客户端
*
*         1,创建客户端Socket对象
*                 Socket(String host, int port)
*                 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
*
*        2,获取Socket对象中的IO流对象
*        3,写数据给服务器,或者从服务器中读数据
*        4,关闭客户端Socket对象
*
---------------
  * TCP协议的服务器端
*
*         1,创建服务器ServerSocket对象
*                 ServerSocket: 此类实现服务器套接字
*                 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
*
        2,等待客户端Socket对象,连接到服务器
                public Socket accept() 等待客户端Socket连接到服务器,返回客户端Socket对象
                该方法为阻塞方法,如果没有客户端Socket对象连接,一直阻塞
       
        3,通过连接的客户端Socket对象,获取客户端发来的数据
                InputStream getInputStream() 返回此套接字的输入流。
                OutputStream getOutputStream() 返回此套接字的输出流        
       
        4,在服务器端进行解析,同时也可以给客户端反馈信息
        5,服务器关闭(一般情况下,都不关闭)

---------------------
文件上次成功,但是服务器不知道完成了, 告诉服务器
通过Socket类中 void shutdownOutput()  禁用此套接字的输出流。

----------------------------------------------------













1 个回复

倒序浏览
我靠,看着就好难的样子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马