紧急求助,用Java写一通信程序 本帖最后由 java2000_net 于 2008-08-05 17:29:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以下是我的程序:以下为ChatServer程序:package TCPChat;import java.awt.BorderLayout;import java.awt.Frame;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class ChatServer extends Thread{ static TextArea ta; static TextField tfWord; ServerSocket ss; public static void main(String[] args) { // 界面 Frame f=new Frame("服务端"); /*TextField tfIP=new TextField(15); TextField tfPort=new TextField(6);*/ ta=new TextArea(20,50); tfWord=new TextField(45); Panel pN=new Panel(); Panel pC=new Panel(); Panel pS=new Panel(); BorderLayout bl=new BorderLayout(); /*pN.add(tfIP); pN.add(tfPort);*/ pC.add(ta); pS.add(tfWord); // f.add(pN,bl.NORTH); f.add(pC,bl.CENTER); f.add(pS,bl.SOUTH); f.setSize(500, 500); f.setLocation(50, 200); f.setVisible(true); f.pack(); //退出命令响应 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); new Thread(new ChatServer()).start();//启动接收线程 //添加发送响应 tfWord.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { if(e.getKeyCode()==e.VK_ENTER) { try { //发送 String strsend=new String(tfWord.getText()+"\n");//储备数据 Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009); OutputStream os=s.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); dos.writeUTF(strsend+"\n"); } catch (Exception e1) { e1.printStackTrace(); } } } }); } //接收线程 public void run() { try { //接收客户端 ss=new ServerSocket(9009); Socket s=ss.accept(); //创建接收流 InputStream is=s.getInputStream(); DataInputStream dis=new DataInputStream(is); String str=dis.readUTF();//接收数据并存入str //显示数据 ta.append(str+"\n");//显示在TextArea中 } catch (IOException e) { e.printStackTrace(); } }}*************************以下为ChatClient程序:package TCPChat;import java.awt.BorderLayout;import java.awt.Frame;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;public class ChatClient extends Thread{ static TextArea ta; static TextField tfWord; Socket s; public static void main(String[] args) {// 界面 Frame f=new Frame("客户端"); /*TextField tfIP=new TextField(15); TextField tfPort=new TextField(6);*/ ta=new TextArea(20,50); tfWord=new TextField(45); Panel pN=new Panel(); Panel pC=new Panel(); Panel pS=new Panel(); BorderLayout bl=new BorderLayout(); /*pN.add(tfIP); pN.add(tfPort);*/ pC.add(ta); pS.add(tfWord); // f.add(pN,bl.NORTH); f.add(pC,bl.CENTER); f.add(pS,bl.SOUTH); f.setSize(500, 500); f.setLocation(500, 200); f.setVisible(true); f.pack(); //退出命令响应 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // 启动发送线程 new Thread(new ChatClient()).start(); //接收响应 tfWord.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { if(e.getKeyCode()==e.VK_ENTER) { try { Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009); InputStream is=s.getInputStream(); DataInputStream dis=new DataInputStream(is); String str=dis.readUTF();//接收数据并存入str //显示 ta.append(str+"\n"); } catch (Exception e1) { e1.printStackTrace(); } } } }); } //发送线程 public void run() { /*String strsend=new String(tfWord.getText()+"\n");//储备数据 try { Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009); OutputStream os = s.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); dos.writeUTF(strsend+"\n"); } catch (IOException e) { e.printStackTrace(); }*/ tfWord.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { if(e.getKeyCode()==e.VK_ENTER) { try { //发送 String strsend=new String(tfWord.getText()+"\n");//储备数据 Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009); OutputStream os=s.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); dos.writeUTF(strsend+"\n"); dos.close(); s.close(); } catch (Exception e1) { e1.printStackTrace(); } } } }); }} 很想帮你改,不过AWT、Swing那一块基本忘了! 要实现改动太多了,你还是去google找一个样例比较好。server://接收线程 public void run() { try { //接收客户端 ss=new ServerSocket(9009); Socket s=ss.accept(); //创建接收流 InputStream is=s.getInputStream(); DataInputStream dis=new DataInputStream(is); String str=dis.readUTF();//接收数据并存入str //显示数据 ta.append(str+"\n");//显示在TextArea中 } catch (IOException e) { e.printStackTrace(); } 这个根本不能实现接收。没做循环。client的接收也不行,没做循环接收。而且你发送的时候已经吧socket关闭了,还能接收吗? JComboBox出现空异常 (原创)深入研究java对String字符串对象的创建以及管理 java打印图像 图像变大了 请问各位高手: 请问ve怎么安装? JPopupMenu弹出后为什么总是已经选中弹出菜单的第一项。 如何清空系统剪切板的内容? 如何编写单进程多协议的程序,同时支持TCP和UDP 谁说java没指针,我觉得全是指针才对 屏幕太小 JavaScript中的匿名函数 如何用JAVA程序做到访问带有用户名密码验证的局域网资源
以下为ChatServer程序:
package TCPChat;import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;public class ChatServer extends Thread{ static TextArea ta;
static TextField tfWord;
ServerSocket ss;
public static void main(String[] args) {
// 界面
Frame f=new Frame("服务端");
/*TextField tfIP=new TextField(15);
TextField tfPort=new TextField(6);*/
ta=new TextArea(20,50);
tfWord=new TextField(45);
Panel pN=new Panel();
Panel pC=new Panel();
Panel pS=new Panel();
BorderLayout bl=new BorderLayout();
/*pN.add(tfIP);
pN.add(tfPort);*/
pC.add(ta);
pS.add(tfWord);
// f.add(pN,bl.NORTH);
f.add(pC,bl.CENTER);
f.add(pS,bl.SOUTH);
f.setSize(500, 500);
f.setLocation(50, 200);
f.setVisible(true);
f.pack();
//退出命令响应
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
new Thread(new ChatServer()).start();//启动接收线程
//添加发送响应
tfWord.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
{
try {
//发送
String strsend=new String(tfWord.getText()+"\n");//储备数据
Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
OutputStream os=s.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeUTF(strsend+"\n");
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
}
//接收线程
public void run()
{
try {
//接收客户端
ss=new ServerSocket(9009);
Socket s=ss.accept();
//创建接收流
InputStream is=s.getInputStream();
DataInputStream dis=new DataInputStream(is);
String str=dis.readUTF();//接收数据并存入str
//显示数据
ta.append(str+"\n");//显示在TextArea中
} catch (IOException e) {
e.printStackTrace();
}
}}
*************************
以下为ChatClient程序:
package TCPChat;import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;public class ChatClient extends Thread{
static TextArea ta;
static TextField tfWord;
Socket s;
public static void main(String[] args) {
// 界面
Frame f=new Frame("客户端");
/*TextField tfIP=new TextField(15);
TextField tfPort=new TextField(6);*/
ta=new TextArea(20,50);
tfWord=new TextField(45);
Panel pN=new Panel();
Panel pC=new Panel();
Panel pS=new Panel();
BorderLayout bl=new BorderLayout();
/*pN.add(tfIP);
pN.add(tfPort);*/
pC.add(ta);
pS.add(tfWord);
// f.add(pN,bl.NORTH);
f.add(pC,bl.CENTER);
f.add(pS,bl.SOUTH);
f.setSize(500, 500);
f.setLocation(500, 200);
f.setVisible(true);
f.pack();
//退出命令响应
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
} });
// 启动发送线程
new Thread(new ChatClient()).start();
//接收响应
tfWord.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
{
try {
Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
InputStream is=s.getInputStream();
DataInputStream dis=new DataInputStream(is);
String str=dis.readUTF();//接收数据并存入str
//显示
ta.append(str+"\n");
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
}
//发送线程
public void run()
{
/*String strsend=new String(tfWord.getText()+"\n");//储备数据 try {
Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
OutputStream os = s.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeUTF(strsend+"\n");
} catch (IOException e) {
e.printStackTrace();
}*/
tfWord.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
{
try {
//发送
String strsend=new String(tfWord.getText()+"\n");//储备数据
Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
OutputStream os=s.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeUTF(strsend+"\n");
dos.close();
s.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
}
}
server:
//接收线程
public void run()
{
try {
//接收客户端
ss=new ServerSocket(9009);
Socket s=ss.accept();
//创建接收流
InputStream is=s.getInputStream();
DataInputStream dis=new DataInputStream(is);
String str=dis.readUTF();//接收数据并存入str
//显示数据
ta.append(str+"\n");//显示在TextArea中 } catch (IOException e) {
e.printStackTrace();
} 这个根本不能实现接收。没做循环。client的接收也不行,没做循环接收。
而且你发送的时候已经吧socket关闭了,还能接收吗?