黑马程序员:初识socket编程(一)

来源:互联网 发布:淘宝版本过低怎么升级 编辑:程序博客网 时间:2024/06/13 22:27

---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------

一、初识网络通讯:

    1、首先,找到对方机器的IP地址;
    2、其次,每台机器上的每个应用程序,都有一个专用的端口号,数据传输时找到相应的端口,让相应的程序进行处理;
    3、机器之间如果正常通讯,还需要一个共有的通讯协议:TCP/IP协议。
    4、常用网络协议:
       应用层协议:http、 ftp
       传输层协议:tcp、udp
       网际层协议:ip
    
二、网络通讯要素:
    1、IP地址:(InetAddress)网络中设备的标识
    2、端口号:用于标识进程的逻辑地址,不同进程的标识
       有效端口:0--65535,其中0--1024使系统保留使用的端口
    3、传输协议:通讯的规则,常见的:TCP、UDP
    
三、传输协议:UDP/TCP
   (一)UDP (无连接、有大小限制、容易丢失数据、速度快)
    1、将数据及源和目的封装成数据包中,不需要建立连接
    2、每个数据包的大小限制在64k以内
    3、因无连接,是不可靠协议
    4、不需要连接,速度快
    5、举例:网络视频会议、步话机
   (二)TCP()
    1、建立连接,形成传输数据的通道
    2、在连接中进行大数据量传输
    3、通过三次握手完成连接,是可靠协议(三次握手:请求——>回复请求——>再回复)
    4、必须建立连接,效率较低
    5、举例:打电话、下载
    
四、Socket(插座)
    Socket是为网络服务提供的一种机制,通信两端都有Socket。
    网络通信就是Socket间的通信,数据在两个Socket间通过IO进行传输。
    
   (一)UDP:发送和接受
    1、发送:不管接收方是否运行,都照样发送,如果有接收方正在运行,则接收方获得数据,否则数据丢失。
    首先,建立socket服务。
          DatagramSocket ds = new DatagramSocket() //建立socket服务,不指定端口,让系统随机分配
      或  DatagramSocket ds = new DatagramSocket(10000) //建立socket服务,指定端口为10000
其次,得到数据,并将数据打包。
      String str = new String("welcome"); //新建一个字符串
      byte[] data = str.getBytes(); //将字符串转换成字节数组
      InetAddress receiveIP = ds.getInetAddress().getByName("192.186.1.107");//指定接收方的IP地址
      int port = 20000; //指定接收方应用程序的端口
      DatagramPacket dp = new DatagramPacket(data,data.length.receiveIP,prot); //创建一个发送数据包
再次,上面一步,数据已经打包完毕,现在只需要使用DatagramSocket的send方法来完成发送即可
      ds.send(dp); //使用send方法发送数据包。
最后,关闭数据资源。
      ds.close();
2、接收:使用UDP传输协议传输数据是,接收方应该先于发送方而运行,否则将接收不到数据。
  首先,与建立发送方类似,先建立socket服务。
        /*
        建立socket服务,不指定端口,让系统随机分配。
         但是作为接收方,如果不指定端口的话,发送方将不知道发数据发送到哪个应用程序。
        */
        DatagramSocket ds = new DatagramSocket() //所以作为接受方,这个对象是不能用的。
        
        /*
        那么,应该怎么建立接收方的socket服务呢,很简单,就是在建立socket服务时,
        指定一个端口号,并且这个端口号,要与发送端所指定的目标端口号一致。
        */
          DatagramSocket ds = new DatagramSocket(20000);//上面发送端指定的目标端口号为20000
    其次,建立一个接受包,用于接收来自发送方的数据。
          //先建一个字节数组,用于存储数据。
          byte[] buf = new byte[1024];
          //创建一个用来存储长度为buf.length的数据包
          DatagramPacket dp = new DatagramPacket(buf,buf.length);
    再次,使用socket的接收方法(receive),接收数据。
          ds.receive(dp);
    再次,将得到的数据进行处理。
          //获取发送方的IP和端口号
          String sendIP = dp.getAddress().getHostAddress();
          int port = dp.getPort();
          
          //获得数据
          String data = new String(dp.getData(),0,dp.getLength());
    最后,关闭资源。

          ds.close();


---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

0 0
原创粉丝点击