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());  }  }}

相关文章
相关标签/搜索