java第二階段學習day5

UDP 網絡協議java

udp 發送端小程序


public class SendUdp {
 public static void main(String[] args) {
  try {
   //一、建立一個 DatagramSocket 的對象  用來調用發送的方法
   DatagramSocket send = new DatagramSocket();
   byte[] b = new byte[1024];
   int length = 0;
   String data = "客戶端發送的數據...";
   b = data.getBytes();
     //獲取要發送的ip地址  InetAddress ip = InetAddress.getByName("192.168.10.99");
   //這裏獲取 本機的ip地址
   InetAddress ip = InetAddress.getLocalHost();
                      //把 要發送的數據 打包
   //二、建立一個數據報包
   DatagramPacket packet = new DatagramPacket(b, length, ip, 110);
                    //三、發送數據
   //把打包好的 數據報包 發送
   send.send(packet);
                //關閉 發送端
                       send.close();
  } catch (SocketException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
-----------服務器

udp 接收端網絡

public class ReceiveUdp {
 public static void main(String[] args) {
  try {
   //建立一個 接收端  對象 用來接收 發送端 發送過來的 數據
   DatagramSocket receiveudp = new DatagramSocket(6666);
   //建立一個 接收 數據 的數據報包 來裝數據
   byte[] b = new byte[1024];
   DatagramPacket packet = new DatagramPacket(b, b.length);
   receiveudp.receive(packet);
   System.out.println(new String(packet.getData()));
  } catch (SocketException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
-------------------------------------------------------------------------app


tcp 客戶端框架


public class ClientTcp {
 public static void main(String[] args) {
  try {
   //建立一個套接字 對象 用來設置 接收端的 IP 和端口 是誰
   Socket client = new Socket("192.168.10.42",999);
   //獲得 要 發送數據 的 輸出管道
   OutputStream os = client.getOutputStream();
   String data = "tcp客戶端發送的數據...";
   byte[] b = new byte[1024];
   b = data.getBytes();
   //發送數據
   os.write(b);
   //關閉 客戶端
   os.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
---------------
tcp 服務端socket

public class ServerceTcp {
 public static void main(String[] args) {
  try {
   //建立一個 服務端 對象 用來 設置 要接收 客戶端 的接口
   ServerSocket server = new ServerSocket(999);
   //監聽 看有沒有 客戶端 鏈接 本服務端
      Socket socket = server.accept();
      //建立一個 接收通道
      InputStream is = socket.getInputStream();
      byte[] b = new byte[1024];
      //接收 客戶端 發送 過來的 數據
      int length = is.read(b);
      System.out.println(new String(b,0,length));
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}tcp

-------------------------------------------------------------------ide

java 可視化 的一個 局域網聊天 小程序this

發送端

public class Client1 {
 public static void main(String[] args) {
  new ClientView();
 }
}
class ClientView extends JFrame implements ActionListener{
 private TextField tf;
 public ClientView() {
  //建立一個標籤
  JLabel prompt_box = new JLabel("請輸入用戶名:");
  //建立一個容器類 panel 面板
  Panel p = new Panel();
  this.add(p);
  //把標籤添加到 框架上
  this.add(prompt_box,BorderLayout.NORTH);
  //建立一個本文編輯框
   tf = new TextField(25);
  //把文本編輯框 加到面板裏
  p.add(tf);
  //建立一個按鈕
  JButton butn_ok = new JButton("肯定");
  //把按鈕 加到面板
  p.add(butn_ok);
  //給按鈕添加一個監聽事件
  butn_ok.addActionListener(this);
  this.setBounds(100, 100, 300, 300);
  this.setTitle("客戶端");
  this.setVisible(true);
  this.setResizable(false);
  //設置退出 程序就結束
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
 }
 @Override
 public void actionPerformed(ActionEvent e) {
  //獲取文本框的內容
  String text_str = tf.getText();
  //建立第二個窗體
  new ClientView2(text_str);
  //隱藏窗口
  this.setVisible(false);
  
 }
}

class ClientView2 extends JFrame implements ActionListener,Runnable{
 private TextField tf;
 private TextArea ta;
 private Socket client_socket;
 public ClientView2(String name) {
  //建立一個客戶端對象 來設置要發送的ip 和 端口
  try {
   client_socket = new Socket("127.0.0.1",999);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  //建立一個文本域
     ta = new TextArea(13,13);
  ta.setEditable(false);
  //建立一個容器類 panel 面板
  Panel p = new Panel();
  //建立一個本文編輯框
     tf = new TextField(25);
     //建立一個按鈕
     JButton butn_send = new JButton("發送");
     //把文本編輯框 加到面板裏
  p.add(tf);
  //把按鈕 加到面板
  p.add(butn_send);
  //設置 發送內容按鈕 的監聽
  butn_send.addActionListener(this);
  //把文本域放在 框架裏
  this.add(ta,BorderLayout.NORTH);
  //把面板放進 框架裏
  this.add(p);
  this.setBounds(100, 100, 300, 300);
  this.setTitle(name + "的客戶端");
  this.setVisible(true);
  //不能夠改變窗體的大小
  this.setResizable(false);
  //建立一個線程接收數據
  new Thread(this).start();
  //設置退出 程序就結束
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  //客戶端
  OutputStream os;
  try {
   //獲取寫的 通道
    os = client_socket.getOutputStream();
   //準備要發送的數據
    String message = tf.getText() + "\r\n";
    os.write(message.getBytes());
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  
 }
 @Override
 public void run() {
  //接收服務端發送 過來的數據
  InputStream recevice;
  try {
    recevice = client_socket.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(recevice));
    while(true){
     String read_message = br.readLine();
     //把接收到的 信息打印到 文本域
     ta.append(read_message + "\r\n");
    }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}
-----------

服務端

class ServerView1 extends JFrame implements ActionListener,Runnable{
 private TextArea ta;
 private ArrayList<Socket> list;
 private Socket server_socket;
 //啓動服務器界面
 public ServerView1() {
  //建立一個文本域
  ta = new TextArea(65,65);
  //設置文本域不能夠寫
  ta.setEditable(false);
  //建立一個容器 panel
  Panel p = new Panel();
  //建立一個按鈕
  JButton butn_server = new JButton();
  butn_server.setText("啓動服務器");
  //監聽啓動服務器 按鈕
  butn_server.addActionListener(this);
  //把按鈕加到面板裏
  p.add(butn_server);
     //把文本域添加到 面板裏    
  p.add(ta);
  ta.setEditable(true);
  this.add(p);
  this.setBounds(100, 100, 500, 500);
  this.setResizable(false);
  this.setTitle("服務器端");
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }

 @Override public void actionPerformed(ActionEvent e) {  //服務器端   try {    ServerSocket server = new ServerSocket(999);       list = new ArrayList<Socket>();       ta.setText("服務器已啓動...");    //設置tcp監聽 有沒有客戶端 接入服務端    while(true){                                 server_socket = server.accept();     //把接受到的客戶端存入集合裏面     list.add(server_socket);     //開啓一個專門用來 蒐集客戶端 //發送過來的信息 而後遍歷轉發     new Thread(this).start();     }    }    catch (IOException e1) {     // TODO Auto-generated catch block     e1.printStackTrace();   } }  @Override public void run() {  InputStream is;  BufferedReader br;  OutputStream os;  try {   is = server_socket.getInputStream();      br = new BufferedReader(new InputStreamReader(is));      String ip = server_socket.getInetAddress().getHostName();   while(true){    //讀取數據    String message = br.readLine();    String message_ip = ip + ":" + message + "\r\n";    for(Socket s :list){       os = s.getOutputStream();    os.write(message_ip.getBytes());    }  }  }catch (IOException e) {   //有客戶端退出 就從 集合裏刪除   String out_ip = server_socket.getInetAddress().getHostAddress();   ta.append(out_ip + "已經退出" + "\r\n");   for(Socket s : list){    if(s.equals(server_socket)){     list.remove(s);     }   }   //System.out.println(list.size());  }  }}

相關文章
相關標籤/搜索