用java做一个1对1聊天,我用Frame做,一直抛出个问题
基本是照抄例题的,烦劳各位大虾看看package network;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;import javax.swing.Box;class Client2 extends Frame implements ActionListener,Runnable{
private TextArea receive;
private TextArea sendtext;
private Button send;
Client2(){
super("网络聊天2");
send=new Button("发送");
receive=new TextArea(8,35);
sendtext=new TextArea(3,20);
receive.setEditable(false);
send.addActionListener(this);
this.setVisible(true);
this.setBounds(100,100,300,260);
this.setResizable(false);
this.setLayout(new FlowLayout());
this.add(getPanel());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Thread t=new Thread(this);
t.start();
}
private Box getPanel(){
Box b0,b1;
b1=Box.createHorizontalBox();
b1.add(sendtext);
b1.add(Box.createHorizontalStrut(10));
b1.add(send);
b0=Box.createVerticalBox();
b0.add(receive);
b0.add(Box.createVerticalStrut(8));
b0.add(b1);
return b0;
} @Override
public void actionPerformed(ActionEvent e) {
receive.append(sendtext.getText()+"\n");
// TODO Auto-generated method stub
byte buffer[]=sendtext.getText().trim().getBytes();
try{
InetAddress add=InetAddress.getByName("127.0.0.1");
DatagramPacket data=new DatagramPacket(buffer,buffer.length,add,666);///////目标端口号
DatagramSocket mail=new DatagramSocket();
mail.send(data);
}catch(Exception e1){System.out.println("send");}
}
public void run(){
DatagramPacket pack=null;
DatagramSocket mail=null;
byte data[]=new byte[8192];
try{
pack=new DatagramPacket(data,data.length);
mail=new DatagramSocket(888); ////////本地端口号
}catch(Exception e){System.out.println("run1");}
while(true){
if(mail==null)
break;
else
try{System.out.println("run20");
mail.receive(pack);System.out.println("run21");////就是这一行一直没执行
String msg=new String(pack.getData(),0,pack.getLength());System.out.println("run22");
receive.append(msg);System.out.println("run23");
}catch(Exception e){System.out.println("run2");break;}
}
}
}
基本是照抄例题的,烦劳各位大虾看看package network;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;import javax.swing.Box;class Client2 extends Frame implements ActionListener,Runnable{
private TextArea receive;
private TextArea sendtext;
private Button send;
Client2(){
super("网络聊天2");
send=new Button("发送");
receive=new TextArea(8,35);
sendtext=new TextArea(3,20);
receive.setEditable(false);
send.addActionListener(this);
this.setVisible(true);
this.setBounds(100,100,300,260);
this.setResizable(false);
this.setLayout(new FlowLayout());
this.add(getPanel());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Thread t=new Thread(this);
t.start();
}
private Box getPanel(){
Box b0,b1;
b1=Box.createHorizontalBox();
b1.add(sendtext);
b1.add(Box.createHorizontalStrut(10));
b1.add(send);
b0=Box.createVerticalBox();
b0.add(receive);
b0.add(Box.createVerticalStrut(8));
b0.add(b1);
return b0;
} @Override
public void actionPerformed(ActionEvent e) {
receive.append(sendtext.getText()+"\n");
// TODO Auto-generated method stub
byte buffer[]=sendtext.getText().trim().getBytes();
try{
InetAddress add=InetAddress.getByName("127.0.0.1");
DatagramPacket data=new DatagramPacket(buffer,buffer.length,add,666);///////目标端口号
DatagramSocket mail=new DatagramSocket();
mail.send(data);
}catch(Exception e1){System.out.println("send");}
}
public void run(){
DatagramPacket pack=null;
DatagramSocket mail=null;
byte data[]=new byte[8192];
try{
pack=new DatagramPacket(data,data.length);
mail=new DatagramSocket(888); ////////本地端口号
}catch(Exception e){System.out.println("run1");}
while(true){
if(mail==null)
break;
else
try{System.out.println("run20");
mail.receive(pack);System.out.println("run21");////就是这一行一直没执行
String msg=new String(pack.getData(),0,pack.getLength());System.out.println("run22");
receive.append(msg);System.out.println("run23");
}catch(Exception e){System.out.println("run2");break;}
}
}
}
DatagramPacket data=new DatagramPacket(buffer,buffer.length,add,666);///////目标端口号new DatagramSocket(888)// 两个端口应该一样。如:9999
mail.receive(pack);System.out.println("run21");////就是这一行一直没执行
String msg=new String(pack.getData(),0,pack.getLength());System.out.println("run22");
receive.append(msg);System.out.println("run23");
}catch(Exception e){System.out.println("run2");break;}
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;import javax.swing.Box;class Client2 extends Frame implements ActionListener,Runnable{
private TextArea receive;
private TextArea sendtext;
private Button send;
Client2(){
super("网络聊天2");
send=new Button("发送");
receive=new TextArea(8,35);
sendtext=new TextArea(3,20);
receive.setEditable(false);
send.addActionListener(this);
this.setVisible(true);
this.setBounds(100,100,300,260);
this.setResizable(false);
this.setLayout(new FlowLayout());
this.add(getPanel());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Thread t=new Thread(this);
t.start();
}
private Box getPanel(){
Box b0,b1;
b1=Box.createHorizontalBox();
b1.add(sendtext);
b1.add(Box.createHorizontalStrut(10));
b1.add(send);
b0=Box.createVerticalBox();
b0.add(receive);
b0.add(Box.createVerticalStrut(8));
b0.add(b1);
return b0;
} @Override
public void actionPerformed(ActionEvent e) {
receive.append(sendtext.getText()+"\n");
// TODO Auto-generated method stub
byte buffer[]=sendtext.getText().trim().getBytes();
try{
InetAddress add;
add = InetAddress.getByName("localhost");
DatagramPacket data=new DatagramPacket(buffer,buffer.length,add,888);///////目标端口号
DatagramSocket mail=new DatagramSocket();
mail.send(data);
}catch(Exception e1){System.out.println("send");}
}
public void run(){
DatagramPacket pack=null;
DatagramSocket mail=null;
byte data[]=new byte[8192];
try{
pack=new DatagramPacket(data,data.length);
mail=new DatagramSocket(888); ////////本地端口号
}catch(Exception e){System.out.println("run1");}
while(true){
if(mail==null)
break;
else
try{System.out.println("run20");
mail.receive(pack);System.out.println("run21");////就是这一行一直没执行
String msg=new String(pack.getData(),0,pack.getLength());System.out.println("run22");
receive.append(msg);System.out.println("run23");
}catch(Exception e){System.out.println("run2");break;}
}
}
}
public class ChatRoom {
public static void main(String [] args) {
Client2 client = new Client2();
client.run();
}
}端口号都要改为888,主机地址用localhost
你客户端的IP一定要是服务器的IP。
mail.receive(pack);System.out.println("run21");////就是这一行一直没执行