关闭

网络编程

标签: 网络exceptionstringbyteclassimport
302人阅读 评论(0) 收藏 举报

Java中的网络编程类
1.位于java的java.net包中
2.DatagramSocket类用于UDP的通信
3.ServerSocket类用于TCP通信的服务器端
4.Socket类用于TCP通信的服务器和客户端

编程实例:简单的UDP程序
package Socket;
import java.net.*;
public class UdpSend {

 /**
  * @param args
  */
 public static void main(String[] args)  {
  // TODO Auto-generated method stub
        try{DatagramSocket ds=new DatagramSocket();
        String str="hello world";
       // DatagramPacket dp=new DatagramPacket(3000);
        //ds.send(new DatagramPacket(str.getBytes(),str.getBytes().length
        //若有中文字符时
        ds.send(new DatagramPacket(str.getBytes(),str.length(),
          InetAddress.getByName("192.168.1.103"),3000));
        ds.close();
 }catch(Exception e){  
  e.printStackTrace();
  
 }
 }
}
package Socket;
import java.net.*;
public class UdpRev {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        try{ DatagramSocket ds=new DatagramSocket(3000);
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,1024);
        ds.receive(dp);
       System.out.println( new String(dp.getData(),0,dp.getLength())+
      "from"+  dp.getAddress().getHostAddress()+":"+dp.getPort());
       ds.close();
 }catch(Exception e){
  e.printStackTrace();
  
 }
 
 }

}
该程序简单实现了 在同一IP下通过UDP方式传送/获取数据


用UDP编写网络聊天程序:
package Socket;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.*;
import java.net.*;
public class Chat extends Frame {
 List lst=new List(6);
 TextField tfIP=new TextField(15);
 TextField tfData=new TextField(20);
 DatagramSocket ds=null;
 public Chat(){
  try{
   ds=new DatagramSocket(3000);
  }catch(Exception e){
   e.printStackTrace();
  }
  this.add(lst,"Center");
  Panel p=new Panel();
  this.add(p,"South");
  p.setLayout(new BorderLayout());
  p.add(tfIP,"West");
  p.add(tfData,"East");
  //建立一个新线程用于接收发送方的数据、
  new Thread(new Runnable(){
   public void run(){
    byte [] buf=new byte[1024];
    DatagramPacket dp=new DatagramPacket(buf,1024);
    while (true){
     try{
      //接收数据,并将接收到的数据添加
      //到lst中去
                                                ds.receive(dp);
      lst.add(new String

(buf,0,dp.getLength())+
        

"from"+dp.getAddress().getHostAddress()+":"+dp.getPort(),0);
      
     }catch(Exception e){
      if(!ds.isClosed()){
      e.printStackTrace();
      }
     }
    }
    
   }
  }).start();
  tfData.addActionListener(new ActionListener(){
   
   public void actionPerformed(ActionEvent e){
    byte []buf;
    buf=tfData.getText().getBytes();
    try{DatagramPacket dp=new DatagramPacket

(buf,buf.length,
      InetAddress.getByName

(tfIP.getText()),3000);
    
    ds.send(dp);
    }catch(Exception ex){
     ex.printStackTrace();
    }
    tfData.setText("");
   }
  });
  addWindowListener(new WindowAdapter(){
   public void WindowClosing(WindowEvent e){
       ds.close();
    dispose();
       System.exit(0);
  }
 });
 
 
 }
 public static void main(String args[]){
  System.out.println("Start chating....");
  Chat mainFrame=new Chat();
  mainFrame.setSize(300, 400);
  mainFrame.setTitle("chat");
  mainFrame.setVisible(true);
  mainFrame.setResizable(false);
  
 }
 

}

一、问题:只有UDP程序才能发送和接受广播地址的数据,为什么?
udp协议时面向无连接的,即通讯之间无需建立连接,它只是把应用程序传递给IP层的数据发送出去,不保证成功与否。而TCP协议则是面向连接的字节流服务,它只有在建立可靠的连接后才能进行数据传递,就没法达到广播的目的。

广播数据包:数据报套接口可以用来向许多系统支持的网络发送广播数据包。要实现这种功

能,网络本身必须支持广播功能,因为系统软件并不提供对广播功能的任何模拟。广播信息

将会给网络造成极重的负担,因为它们要求网络上的每台主机都为它们服务,所以发送广播

数据包的能力被限制于那些用显式标记了允许广播的套接口中。
二、广播使用的两种情况:
1. 一个应用程序希望在本地网络中找到一个资源,而应用程序对该资源的地址又没有任何先

验的知识。
2. 一些重要的功能,例如路由要求把它们的信息发送给所有可以找到的邻机
三、扩展:①IP地址、网络地址、广播地址三者的区别。二已知IP地址、子网掩码求网络地址和广播地址。③已知网络主机数量进行子网地址的规划和计算子网掩码(计算机网络知识)。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:52059次
    • 积分:856
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:2篇
    • 译文:0篇
    • 评论:21条
    文章分类
    最新评论