區域網內主機之間Socket通訊實現
阿新 • • 發佈:2019-01-03
只能傳輸文字且只能在區域網內實現通訊
主機1:
package SocketTest; import java.net.*; import java.io.*; import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; public class Server extends JFrame implements Runnable,ActionListener { JTextField outMessage = new JTextField(12); JTextArea inMessage = new JTextArea(12,20); JButton b = new JButton("傳送資料"); Server(){ super("Server"); setSize(320,200); setVisible(true); JPanel p = new JPanel(); b.addActionListener(this); p.add(outMessage); p.add(b); Container con = getContentPane(); con.add(new JScrollPane(inMessage), BorderLayout.CENTER); con.add(p, BorderLayout.NORTH); Thread thread = new Thread(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); validate(); thread.start(); } public void actionPerformed(ActionEvent event){ byte b[] = outMessage.getText().trim().getBytes(); try{ InetAddress address = InetAddress.getByName("192.168.1.110"); DatagramPacket data = new DatagramPacket(b,b.length,address,1234); DatagramSocket mail = new DatagramSocket(); mail.send(data); } catch(Exception e){} } public void run(){ DatagramPacket pack = null; DatagramSocket mail = null; byte b[] = new byte[8192]; try{ pack = new DatagramPacket(b,b.length); mail = new DatagramSocket(5678); } catch(Exception e){} while(true){ try{ mail.receive(pack); String message = new String(pack.getData(),0,pack.getLength()); inMessage.append("收到的資料來自"+pack.getAddress()); inMessage.append("\n收到的資料是"+message+"\n"); inMessage.setCaretPosition(inMessage.getText().length()); } catch(Exception e){} } } public static void main(String [] args){ new Server(); } }
主機2:
package SocketTest; import java.net.*; import java.io.*; import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; public class Client extends JFrame implements Runnable,ActionListener { JTextField outMessage = new JTextField(12); JTextArea inMessage = new JTextArea(12,20); JButton b = new JButton("傳送資料"); Client(){ super("Client"); setBounds(350,100,320,200); setVisible(true); JPanel p = new JPanel(); b.addActionListener(this); p.add(outMessage); p.add(b); Container con = getContentPane(); con.add(new JScrollPane(inMessage), BorderLayout.CENTER); con.add(p, BorderLayout.NORTH); Thread thread = new Thread(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); validate(); thread.start(); } public void actionPerformed(ActionEvent event){ byte b[] = outMessage.getText().trim().getBytes(); try{ InetAddress address = InetAddress.getByName("192.168.1.106"); DatagramPacket data = new DatagramPacket(b,b.length,address,5678); DatagramSocket mail = new DatagramSocket(); mail.send(data); } catch(Exception e){} } public void run(){ DatagramPacket pack = null; DatagramSocket mail = null; byte b[] = new byte[8192]; try{ pack = new DatagramPacket(b,b.length); mail = new DatagramSocket(1234); } catch(Exception e){} while(true){ try{ mail.receive(pack); String message = new String(pack.getData(),0,pack.getLength()); inMessage.append("收到的資料來自"+pack.getAddress()); inMessage.append("\n收到的資料是"+message+"\n"); inMessage.setCaretPosition(inMessage.getText().length()); } catch(Exception e){} } } public static void main(String [] args){ new Client(); } }