黑马程序员技术交流社区

标题: 网络编程 [打印本页]

作者: ice24    时间: 2015-6-24 12:22
标题: 网络编程
网络编程(又叫socket编程、套接字编程)
        1、网络概述
            
        2、网络编程:就是用语言(java)实现多台计算机的通信
           三大要素:
              1)IP地址:网络中每一台计算机的唯一标识
              2)端口:用于标识进程的逻辑地址
              3)协议:定义通信规则

        3、IP地址
              计算机的唯一标识
              给出一个十进制的ip地址值,在网络中实际是用二进制传输
          
           查看本机IP:ipconfig
           查看网络是否有问题:ping + IP地址   加-t可以不断打印
                 ping 127.0.0.1(本机回环地址)

        4、端口 逻辑端口
           1)每个网络程序都会至少有一个逻辑端口
           2)用于标识进程的逻辑地址,不同进程的标识不一样
           3)有效端口:0-65535,其中0-1024系统使用或保留端口。

        5、协议:定义的规则
           5.1、TCP 安全协议
              1)建立连接通道
              2)数据无限制
              3)面向连接(三次握手)
              4)因为面向连接,可靠
              5)因为面向连接,速度慢

              举例:蓝牙,QQ单聊,打电话

           5.2、UDP 比较不安全
              1)把数据打包
              2)数据有限制
              3)面向无连接
              4)因为无连接,不可靠
              5)因为无连接,速度快

              举例:QQ聊天室(群聊)

        6、Socket:是为网络编程提供的一种机制,包装了有端口和ip地址
           6.1、概述
               通信两端都有Socket
               网络通信其实就是Socket间的通信
               数据在两个Socket间通过IO传输

        7、IP类的操作对象
           InetAddress类,IP地址的包装类
          
           没有构造方法,有静态方法返回该类的对象
           public static InetAddress getByName(String host)

           成员方法
           public String getHostAddress():获取主机ip地址
           public String getHostName():获取主机名
           public String getLocalHost:获取本地主机
           public String getByName(String ip):获取任意主机

        8、UDP发送和接收
          8.1、UDP协议发送数据步骤
             1)创建发送的Socket服务对象
                  DatagramSocket
                    //DatagramSocket ds = new DatagramSocket();
             2)创建数据,并把数据打包
                  DatagramPacket dp = new DatagramPacket();
                    //byte[] bys = line.getBytes();
                    //DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.1.100"), 10086);
             3)发送数据
                  public void send(DatagramPacket);
                    //ds.send(dp);
             4)释放资源
                  close();

          8.2、UDP协议接收数据步骤
             1)创建接收端Socket服务对象
                  DatagramSocket(int port)
                    //DatagramSocket ds = new DatagramSocket(10086);
             2)创建数据包(接收容器)
                  DatagramPacket(byte[] buf,int length);
                    //byte[] bys = new byte[1024];
                    //DatagramPacket dp = new DatagramPacket(bys, bys.length);
             3)调用接收方法
                  public void receive(DatagramPacket)
                    //ds.receive(dp);
             4)解析数据包,把数据显示在控制台
                  public InetAddress getAddress()
                    //String ip = dp.getAddress().getHostAddress();
                    //String s = new String(dp.getData(), 0, dp.getLength());
                    //String hostName = dp.getAddress().getHostName();
             5)释放资源
                  close()

          8.3、注意事项
             1)端口一定要一致
             2)一个服务端口只能使用一次
                只有接收端会占用端口,一启动就占用端口
                发送端不占用端口
          
          8.4、广播地址
              每个网段的最后一个地址255
              如果设定ipp为255,从1-254的计算机只要开着接收端就都能收到
             
        9、
          9.1、TCP协议客户端的步骤
               发送数据
            1)创建客户端的Socket对象
                 public Socket(InetAddress add, int port)
                 public Socket(Stirng host, int port)
            2)建立连接  只要创建Socket对象,就连接成功
            3)获取输出流,写数据即可
                Socket: public OutputStream getOutputStream
            4)关闭资源
          
          9.2、注意:
             TCP程序,必须先开服务器端。(面向连接)
             否则会因为找不到端口,而报错:java.net.ConnectException: Connection refused: connect

          9.3、TCP协议服务器端的步骤:
             1)创建服务器端Socket对象
                   ServerSocket(int port)
             2)监听连接
                   public Socket accept()
             3)获取输入流,读取数据,并显示
                  public InputStream getInputStream()
             4)释放资源

             ServerSocket(int port) 构造函数
             public Socket accept() 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
             Socket: public InputStream getInputStream()

          9.4、TCP协议接收数据给出反馈
             
          9.5、上传文件出现的问题
              写数据进去了,但是反馈没有成功
              原因:是因为服务器不知道你已经写完了
              解决:告诉服务器已经写完了
                1)自定义结束标记。 但是有一个数据跟结束标记一样,就无法再传数据
                2)Socket提供了一个方法,通知传输已接收
                   public void shutdownOutput()


作者: lygku    时间: 2015-6-24 12:48
顶起。。。。。。。。。。。。。。。。。
作者: yaoxufanalan    时间: 2015-6-24 12:59
好酷阿,必须赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2