一,介绍
- 1,本次作为课程的一个作业展示
- 2,想不到自己会有一天在优酷上学习
- 3,本次主要用到了 Java 中的 net 包下的一些功能,socket,packet等,然后自己是为了测试写了一个窗口程序,以及线程来测试。
- 4,在测试的时候记得端口号,第一个默认就好,第二个是相反的,因为是两边对调了。
二,代码演示
package com.NetChat;
import com.sun.javaws.util.JfxHelper;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class JFChat extends JFrame {
DatagramPacket dp;
DatagramSocket ds;
InetAddress serverIp;
int serverPort;
int localPort;
private JTextArea tacontent;
private JTextField txtsay;
private JButton btnsend;
private JScrollPane jScrollPane;
private JButton buttons[];
public JFChat(){
this.setBounds(320, 240, 400, 240);
this.tacontent=new JTextArea();
this.tacontent.setEditable(false);
this.getContentPane().add(new JScrollPane(this.tacontent));
this.btnsend=new JButton();
JToolBar toolBar=new JToolBar();
this.getContentPane().add(toolBar,"South");
this.txtsay=new JTextField(30);
toolBar.add(txtsay);
buttons=new JButton[2];
buttons[0]=new JButton("发送");
buttons[1]=new JButton("下线");
toolBar.add(buttons[0]);
toolBar.add(buttons[1]);
buttons[0].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMsg(txtsay.getText());
txtsay.setText("");
}
});
this.setVisible(true);
}
public void initConn(){
try {
String sip=JOptionPane.showInputDialog(this,"请输入服务器端的ip地址","127.0.0.1");
String sport=JOptionPane.showInputDialog(this,"请输入服务器端的端口号:","4000");
String lport=JOptionPane.showInputDialog(this,"请输入本地端的端口号:","4001");
serverIp=InetAddress.getByName(sip);
serverPort=Integer.parseInt(sport);
localPort=Integer.parseInt(lport);
}catch (Exception e){
e.printStackTrace();
}
}
public void sendMsg(String msg){
try {
byte[] buff=msg.getBytes();
dp=new DatagramPacket(buff,buff.length,serverIp,serverPort);
ds=new DatagramSocket();
ds.send(dp);
this.tacontent.append("self say:"+msg+"\n");
}catch (Exception e){
e.printStackTrace();
}
}
public void receive(){
byte[] buff=new byte[1024];
DatagramPacket rdp=new DatagramPacket(buff,buff.length);
try {
DatagramSocket rds=new DatagramSocket(localPort);
String msg;
while (true){
rds.receive(rdp);
buff=rdp.getData();
msg=new String(buff,0,buff.length);
this.tacontent.append(rdp.getAddress().getHostAddress()+"say:"+msg+"\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JFChat chat=new JFChat();
chat.setVisible(true);
chat.initConn();
chat.receive();
}
}
package com.NetChat;
public class T implements Runnable {
@Override
public void run() {
JFChat chat=new JFChat();
chat.setVisible(true);
chat.initConn();
chat.receive();
}
}
package com.NetChat;
public class Test {
public static void main(String[] args) {
Thread t1=new Thread(new T());
Thread t2=new Thread(new T());
t1.start();
t2.start();
System.out.println("program end!");
}
}