同学网上找的代码,说会乱码。看了源码,没发现什么原因,运行起来对方发送过来的字符串确实是乱码的。同学用的NetBeans我用的Eclipse,而NetBeans默认的编码是UTF-8,Eclipse默认的是GBK;琢磨着就是这个引起的。。。。都改成一样的编码就没事了。代码如下:
- packagetest;
- importjava.awt.BorderLayout;
- importjava.awt.List;
- importjava.awt.TextField;
- importjava.awt.event.ActionEvent;
- importjava.awt.event.ActionListener;
- importjava.io.IOException;
- importjava.net.DatagramPacket;
- importjava.net.DatagramSocket;
- importjava.net.InetAddress;
- importjava.net.SocketException;
- importjava.net.UnknownHostException;
- importjavax.swing.JFrame;
- importjavax.swing.JPanel;
- publicclassnetchat{
- JFramejf=newJFrame("聊天窗口");
- Listl=newList(6);
- JPaneljp=newJPanel();
- TextFieldtip=newTextField(15);
- TextFieldtdata=newTextField(15);
- DatagramSocketds;
- //DatagramPacketdp;
- publicnetchat(){
- tip.setText("127.0.0.1");
- try{
- ds=newDatagramSocket(3000);
- }catch(SocketExceptione){
- e.printStackTrace();
- }
- newThread(newRunnable()
- {
- DatagramPacketdp;
- publicvoidrun(){
- byte[]buf=newbyte[1024];
- dp=newDatagramPacket(buf,1024);
- while(true){
- try{
- ds.receive(dp);
- //l.add(dp.getAddress().getHostName()+"say:"+new
- //String(buf,0,dp.getLength()),-1);
- //l.add(dp.getAddress().getHostAddress()+"say:"+new
- //String(buf,0,+dp.getLength()),-1);
- System.out.println("aaaa");
- Stringstr=newString(dp.getData(),0,dp.getLength());
- System.out.println("数据1是:"+str);
- Stringstr2=newString(buf,0,dp.getLength());
- System.out.println("数据2是:"+str2);
- l.add(dp.getAddress().getHostAddress()+"say:"+str,
- -1);
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- }).start();
- }
- publicstaticvoidmain(String[]args){
- newnetchat().init();
- }
- privatevoidinit(){
- jf.add(l);
- jp.add(tip,BorderLayout.WEST);
- jp.add(tdata,BorderLayout.EAST);
- jf.add(jp,BorderLayout.SOUTH);
- jf.setSize(400,300);
- jf.setVisible(true);
- jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- tdata.addActionListener(newActionListener(){
- publicvoidactionPerformed(ActionEvente){
- byte[]buf;
- Stringstr222=e.getActionCommand();
- buf=str222.getBytes();
- System.out.println("ddd="+str222);
- l.add("我说:"+str222,-1);
- //buf=e.getActionCommand().getBytes();
- DatagramPacketdp;
- try{
- dp=newDatagramPacket(buf,buf.length,InetAddress
- .getByName(tip.getText()),3000);
- ds.send(dp);
- }catch(UnknownHostExceptione1){
- e1.printStackTrace();
- }catch(IOExceptione1){
- e1.printStackTrace();
- }
- ((TextField)e.getSource()).setText("");
- }
- });
- }
- }
运行结果就是一个小窗体。。。