java网络问题!不是很难,帮着看看吧!(2) Chat chat=new Chat();有Chat这个类吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还是连chat一起全贴了好像又改动不少。 呵呵,还好基本上没怎么改啊,估计不用贴那个啊,既然大家有要求就满足!import java.awt.*;import java.awt.event.*;import java.net.*;class Chat extends Frame { List lst = new List(6); TextField tfIP = new TextField(15); TextField tfData = new TextField(20); Button b = new Button("机器人"); DatagramSocket ds = null; public Chat() { try{ ds=new DatagramSocket(3000); } catch(Exception e) { e.printStackTrace(); } this.add(lst,"Center"); Panel p =new Panel(); this.add(p,"South"); p.setLayout(new BorderLayout()); p.add(tfIP,"West"); p.add(b,"Center"); p.add(tfData,"East"); setSize(400, 400); setTitle("Chat"); setVisible(true); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ds.close(); dispose(); Chat1 chat1=new Chat1(); } }); new Thread(new Runnable() { public void run() { byte buf[] = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,1024); while(true) { try{ ds.receive(dp); lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+ dp.getPort(),0); String s=new String(buf,0,dp.getLength()); } catch(Exception e) { if(!ds.isClosed()) { e.printStackTrace(); } } } } }).start(); tfData.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { byte [] buf; buf = tfData.getText().getBytes(); try{ DatagramPacket dp=new DatagramPacket(buf,buf.length, InetAddress.getByName(tfIP.getText()),3000); ds.send(dp); } catch(Exception ex) { ex.printStackTrace(); } tfData.setText(""); } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ds.close(); dispose(); System.exit(0); } }); } public static void main(String args[]) { System.out.println("Starting Chat..."); Chat mainFrame = new Chat(); mainFrame.setSize(400, 400); mainFrame.setTitle("Chat"); mainFrame.setVisible(true); mainFrame.setResizable(false); }}没什么改变的! 当然是发过了啊,都写(2)了啊,呵呵 大家支持啊!特别是febchen() ,上次只有这位大侠指点,希望这次也不吝赐教啊! 你想谋杀我的爱机啊,呵呵,一按机器人CPU就发烧了。你想实现什么功能,能告诉我吗? 怎么可能,机器人那个只是把原来的端口和窗口关闭然后再弹出个窗口,功能嘛不是很麻烦,Chat里就是简单的聊天程序,机器人的那个可以根据受到的信息自动回复啊!现在在自动恢复那有些问题,所以特来请教 改了一下在////////////中有些不协调,意思应该差不多把。aa.txt中的内容如下,至少4行你好是1再见import java.awt.*;import java.awt.event.*;import java.net.*;import javax.swing.*;import java.io.*;class Chat1 extends Frame { List lst = new List(6); TextField tfIP = new TextField(15); TextField tfData = new TextField(20); Button b = new Button("È¡Ïû»úÆ÷ÈË"); DatagramSocket ds = null; public Chat1() { try{ ds=new DatagramSocket(3000); } catch(Exception e) { e.printStackTrace(); } this.add(lst,"Center"); Panel p =new Panel(); this.add(p,"South"); p.setLayout(new BorderLayout()); p.add(tfIP,"West"); p.add(b,"Center"); p.add(tfData,"East"); setSize(400, 400); setTitle("Chat1"); setVisible(true); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ds.close(); dispose(); Chat chat=new Chat(); } }); new Thread(new Runnable() { public void run() { byte buf[] = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,1024); while(true) { try{ ds.receive(dp); lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+ dp.getPort(),0); try{FileReader f=new FileReader("c:\\aa.txt"); BufferedReader buff = new BufferedReader(f); String s=new String(buf,0,dp.getLength()); int x=0; ////////////// String s1=""; while((s1=buff.readLine())!=null) {if(s1.equals(s)) break; x++;} /////////////// if(x==0) lst.add("ÄãºÃ"); if(x==1) lst.add("ÎÒÊÇÐÇ×ùÅж¨³ÌÐò£¬ÒªÊÔÊÔÂð£¿"); if(x==2) lst.add("Çë°´¿ªÊ¼¼ü"); if(x==3) {System.out.println("»¶Ó­ÔÙ´ÎʹÓã¡"); System.out.println(" ×÷ÕߣºÂÀá¿"); System.exit(0);} }catch(Exception exx) {System.out.println(exx.toString());} } catch(Exception e) { if(!ds.isClosed()) { e.printStackTrace(); } } } } }).start(); tfData.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { byte buf[] = new byte[1024]; //DatagramPacket dp = new DatagramPacket(buf,1024); //String s=new String(buf,0,dp.getLength()); byte [] buf1; buf1 = tfData.getText().getBytes(); try{ DatagramPacket dp1=new DatagramPacket(buf1,buf1.length, InetAddress.getByName(tfIP.getText()),3000); ds.send(dp1); } catch(Exception ex) { ex.printStackTrace(); } tfData.setText(""); } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ds.close(); dispose(); System.exit(0); } }); }} 还是不行啊,不能自动回复…… 我是自己试的,我给自己发信息应该也能看到自动的回复,但是还是没有,和Chat一样啊,只能接收没有自动的回复,以前做的是输入一段话需要一个按钮才能根据aa.txt自动回复现在只是想在收到的时候就能回复了。恩 ,大概是这个意思,就是让收到信息这个时间触发自动回复的事件。 确实有些晕还没试过远程的把发送信息的代码从actionPerformed(ActionEvent e)中提取出来,专门写一个发送方法,发送信息作为参数,如:sendMessage(String msg);然后将 lst.add("你好");这个地方改成发送方法发送,如sendMessage("你好");提个思路,今天没环境,自己试验把。 恩 我倒是有点想法了,不过ds.send发送的是数据包啊,正琢磨怎么转化呢。应该是有个什么IO的是直接读成字节的,就不用了BufferedReader了吧! 俺看晕了!没办法,是初学者!顺便问一个很傻的问题,怎样能用java使两个电脑交换数据! 真是爱莫能助,没有用DatagramPacket通信过,你查查有关socket通信的例子程序把,应该很多的,也许会有帮助。 菜鸟请教一个问题,大大请进。 jdk版本 利用socket向网络打印机发送文件去打印 java 如何打开一个网站得到该网站的Url编码格式 关于在命令行下不识别javac命令的问题 急~~关于JAVA语言反射的问题 关于控制台程序的关闭。 高分!——用java实现关闭其他程序(进程)的问题 如何让控件有闪动效果? Frame设置尺寸不起作用 写了个多线程的程序,将接受的数据存入数据库,使用的静态函数连接数据库,但是用netstat查看,却有一堆连接。。 请问各位高手一个有关于输入输出的问题!
好像又改动不少。
import java.awt.*;
import java.awt.event.*;
import java.net.*;class Chat extends Frame {
List lst = new List(6);
TextField tfIP = new TextField(15);
TextField tfData = new TextField(20);
Button b = new Button("机器人");
DatagramSocket ds = null;
public Chat() {
try{
ds=new DatagramSocket(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
this.add(lst,"Center");
Panel p =new Panel();
this.add(p,"South");
p.setLayout(new BorderLayout());
p.add(tfIP,"West");
p.add(b,"Center");
p.add(tfData,"East");
setSize(400, 400);
setTitle("Chat");
setVisible(true);
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ds.close();
dispose();
Chat1 chat1=new Chat1();
}
});
new Thread(new Runnable()
{
public void run()
{
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,1024);
while(true)
{
try{
ds.receive(dp);
lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+ dp.getPort(),0);
String s=new String(buf,0,dp.getLength());
}
catch(Exception e)
{
if(!ds.isClosed())
{
e.printStackTrace();
}
}
}
}
}).start();
tfData.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
byte [] buf;
buf = tfData.getText().getBytes();
try{
DatagramPacket dp=new DatagramPacket(buf,buf.length,
InetAddress.getByName(tfIP.getText()),3000);
ds.send(dp);
}
catch(Exception ex)
{
ex.printStackTrace();
}
tfData.setText("");
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ds.close();
dispose();
System.exit(0);
}
}); } public static void main(String args[]) {
System.out.println("Starting Chat...");
Chat mainFrame = new Chat();
mainFrame.setSize(400, 400);
mainFrame.setTitle("Chat");
mainFrame.setVisible(true);
mainFrame.setResizable(false);
}
}
没什么改变的!
你想实现什么功能,能告诉我吗?
在////////////中
有些不协调,意思应该差不多把。aa.txt中的内容如下,至少4行
你好
是
1
再见
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
import java.io.*;class Chat1 extends Frame {
List lst = new List(6);
TextField tfIP = new TextField(15);
TextField tfData = new TextField(20);
Button b = new Button("È¡Ïû»úÆ÷ÈË");
DatagramSocket ds = null;
public Chat1() {
try{
ds=new DatagramSocket(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
this.add(lst,"Center");
Panel p =new Panel();
this.add(p,"South");
p.setLayout(new BorderLayout());
p.add(tfIP,"West");
p.add(b,"Center");
p.add(tfData,"East");
setSize(400, 400);
setTitle("Chat1");
setVisible(true);
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ds.close();
dispose();
Chat chat=new Chat();
}
});
new Thread(new Runnable()
{
public void run()
{
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,1024);
while(true)
{
try{
ds.receive(dp);
lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+ dp.getPort(),0);
try{FileReader f=new FileReader("c:\\aa.txt");
BufferedReader buff = new BufferedReader(f);
String s=new String(buf,0,dp.getLength());
int x=0;
//////////////
String s1="";
while((s1=buff.readLine())!=null)
{if(s1.equals(s))
break;
x++;}
///////////////
if(x==0)
lst.add("ÄãºÃ");
if(x==1)
lst.add("ÎÒÊÇÐÇ×ùÅж¨³ÌÐò£¬ÒªÊÔÊÔÂð£¿");
if(x==2)
lst.add("Çë°´¿ªÊ¼¼ü");
if(x==3)
{System.out.println("»¶Ó­ÔÙ´ÎʹÓã¡");
System.out.println(" ×÷ÕߣºÂÀá¿");
System.exit(0);}
}catch(Exception exx)
{System.out.println(exx.toString());}
}
catch(Exception e)
{
if(!ds.isClosed())
{
e.printStackTrace();
}
}
}
}
}).start();
tfData.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
byte buf[] = new byte[1024];
//DatagramPacket dp = new DatagramPacket(buf,1024);
//String s=new String(buf,0,dp.getLength());
byte [] buf1;
buf1 = tfData.getText().getBytes();
try{
DatagramPacket dp1=new DatagramPacket(buf1,buf1.length,
InetAddress.getByName(tfIP.getText()),3000);
ds.send(dp1);
}
catch(Exception ex)
{
ex.printStackTrace();
}
tfData.setText("");
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ds.close();
dispose();
System.exit(0);
}
});
}
}
actionPerformed(ActionEvent e)
中提取出来,专门写一个发送方法,发送信息作为参数,
如:
sendMessage(String msg);
然后
将 lst.add("你好");
这个地方改成发送方法发送,如
sendMessage("你好");提个思路,今天没环境,自己试验把。
顺便问一个很傻的问题,怎样能用java使两个电脑交换数据!