-
java我编写的一个聊天程序出现了一些问题不知道怎么解决5
import java.io.*;
import java.net.*;
import java.util.*;
public class SecurityChatServer {
boolean started = false;
ServerSocket ss = null;
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) {
new SecurityChatServer().start();
}
public void start() {
try {
ss = new ServerSocket(8888);
started = true;
} catch (BindException e) {
System.out.println("端口使用中....");
System.out.println("请关掉相关程序并重新运行服务器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
while(started) {
Socket s = ss.accept();
Client c = new Client(s);
System.out.println("a client connected!");
new Thread(c).start();
clients.add(c);
//dis.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Client implements Runnable {
private Socket s;
private DataInputStream dis = null;
private DataOutputStream dos = null;
private boolean bConnected = false;
public Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String str) {
try {
dos.writeUTF(str);
//System.out.println(str);
} catch (IOException e) {
clients.remove(this);
System.out.println("对方退出了!我从List里面去掉了!");
//e.printStackTrace();
}
}
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
//System.out.println(str);
for(int i=0; i<clients.size(); i++) {
Client c = clients.get(i);
c.send(str);
System.out.println(str);
//System.out.println(" a string send !");
}
}
} catch(SocketException e){
System.out.println("客户端退出了!");
}catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis != null) dis.close();
if(dos != null) dos.close();
if(s != null) {
s.close();
//s = null;
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
//以上是服务器端
import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
public class SecurityChatClient extends Frame {
private TextArea ta = new TextArea(10,50);
private TextField tf = new TextField();
private TextField tf2 = new TextField();
private Button b = new Button("输入ip");
private Panel p1 = new Panel();
Socket s = null;
InetAddress address = null;
DataOutputStream dos = null;
DataInputStream dis = null;
boolean bConnected = false;
public static void main(String[] args){
new SecurityChatClient().launchFrame();
}
public void launchFrame(){
p1.setLayout(new BorderLayout());
p1.add(tf,BorderLayout.WEST);
p1.add(tf2,BorderLayout.CENTER);
p1.add(b,BorderLayout.EAST);
this.add(ta,BorderLayout.NORTH);
this.add(p1,BorderLayout.SOUTH);
this.pack();
this.setResizable(false);
this.setVisible(true);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
b.addActionListener(new ButtonEvent1());
new Thread(new Reclient()).start();
tf.addActionListener(new TFListener());
}
public void connect(){
try {
s = new Socket(address,8888);
bConnected = true;
System.out.println("connected!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
class ButtonEvent1 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String str = tf2.getText();
try {
address = InetAddress.getByName(str);
System.out.println(address);
connect();
tf2.setText("");
} catch (UnknownHostException e1) {
e1.printStackTrace();
}
}
}
class Reclient implements Runnable{
@Override
public void run() {
while(bConnected == true){
try {
String str = dis.readUTF();
System.out.println(str);
ta.setText(ta.getText() + str + '\n');
} catch(SocketException e){
System.out.println("对方退出了!");
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
class TFListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText().trim();
tf.setText("");
ta.setText(str);
dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(str);
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
//以上是客户端
我起了服务器端,然后再在我的电脑起了两个客户端然后连个客户端都输入的是127.0.0.1这个ip地址但是服务器端能接收到信息但是不返回给另外一个客户端。求说下这个问题怎么解决,我找了好半天都没有找到啊。我现在发现的问题是客户端不能收到,而且在客户端发一个信息的话在服务器端回打两边但是就是不返回给另一个客户端。但是我不知道怎么解决这个问题。
2012年12月28日 01:29
1个答案 按时间排序 按投票排序
-
采纳的答案
没有全部调试,客户端代码存在写问题:
class Reclient implements Runnable { @Override public void run() { while (true) { if(bConnected){ try { System.out.println("等待接受数据..."); String str = dis.readUTF(); System.out.println("receive: " + str); ta.setText(ta.getText() + str + '\n'); } catch (SocketException e) { System.out.println("对方退出了!"); } catch (IOException e) { e.printStackTrace(); } } } } }
按照你原先的代码,Reclient线程判断bConnected后会直接退出。
另外DataOutputStream dos = null; DataInputStream dis = null;
下面没有初始化,会抛出空指针异常。
应该还有写别的问题,你自己仔细看看吧。2012年12月28日 10:47
相关推荐
这是用Java编写的简单聊天程序 可供初学者下载学习
在这个项目中,我们将深入探讨如何利用Java来构建一个简单的聊天程序,模仿QQ的功能,使得两个用户可以在局域网上进行实时对话,并能保存聊天记录。 首先,我们需要了解Java的Socket编程。Socket是TCP/IP协议族的一...
【标题】:“用Java编写的简单聊天程序” 在IT领域,Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性而闻名。本项目是一个基于Java实现的简单聊天程序,它展示了如何利用Java进行网络...
本项目是个人使用JAVA编写的聊天程序,它实现了基本的即时通讯功能,用户之间可以进行文字聊天并发送表情,具有实时性的特点。 首先,我们要了解Java聊天程序的基础架构。在Java中,通常会采用Socket编程来实现网络...
【Java语言编写的聊天室程序】是一个基于Java技术构建的多用户交互系统,允许用户进行实时文本交流。这个程序在JDK6环境下开发,并利用了NetBeans 6.1集成开发环境来提供便利的代码编写和项目管理。下面将详细探讨...
用java语言编一个聊天小程序 要求: 使用图形用户界面。 能实现一个聊天室中多人聊天。 可以两人私聊。 提示:使用socket通信 import java.awt.*;
Java编写的聊天室程序是一种基于Java编程语言实现的实时通讯应用,它允许用户进行文本、语音甚至视频交流。在这个程序中,服务器端扮演着至关重要的角色,它接收客户端的连接请求,处理用户的注册、登录以及在聊天室...
【标题】:“用Java实现的一个聊天程序” 在IT领域,编程语言Java因其强大的跨平台能力和丰富的库支持,常被用于开发各种类型的应用程序,包括聊天程序。本项目是一个基于客户端-服务器(Client-Server,简称CS)...
在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个...
Java编写的QQ聊天程序是一种基于Java编程语言实现的即时通讯应用,它允许用户进行文本、语音甚至视频聊天。虽然这个程序可能无法与官方的QQ客户端在功能和用户体验上完全媲美,但它为我们提供了一个理解即时通讯软件...
在IT行业中,用Java编写聊天程序是一项常见的任务,它涉及到网络编程、多线程、并发处理、对象序列化以及用户界面设计等多个核心领域。下面将详细介绍这些知识点。 1. **Java基础**: Java是一种面向对象的编程...
我用JAVA的servlet写的这个小聊天程序,总共才几KB,但可以在不同的电脑上进行多人对话,删除记录等,我把数据库验证登陆写进去了,你若不想要这个登陆程序可以删掉,那样就不需要登陆直接开始聊天了。这个程序结构...
在这个场景中,我们讨论的是一个用Java编写的基本聊天程序。这样的程序通常基于客户端-服务器架构,允许用户通过网络进行实时通信。下面将详细阐述Java聊天程序涉及的核心知识点。 1. **网络编程**:Java的`java...
免费分享~用java编写的聊天程序,具有聊天界面,可以实现两两之间的对话。使用GUI和socket以及多线程,聊天软件是学习java的一个极好的练手工具。
java编写的聊天程序, 可以用来研究java的网络编程
打酱油在这里是一种幽默的说法,意味着轻松应对,这表明这个Java聊天程序的实现可能相对简单,易于理解和修改,适合初学者快速上手。 【标签】:“JAVA,聊天工具” “JAVA”标签明确了该项目是使用Java语言开发的...
【Java编写的局域网聊天程序】是一种使用Java编程语言实现的、能在同一局域网内的设备间进行通信的应用程序。这种程序的核心是利用网络编程技术,让不同计算机上的用户可以互相发送消息,进行实时交流。Java作为一种...
根据提供的信息,我们可以总结出以下关于“一个Java编写的聊天程序”的相关知识点: ### 一、项目概述 此Java编写的聊天程序包含了服务器端和客户端的实现,它能够支持简单的文本消息传递功能。该程序主要面向希望...
在Java编程语言中实现一个聊天程序是一项常见的任务,它涵盖了多个关键知识点,包括网络通信、数据库管理和用户界面设计。下面将详细阐述这些方面。 首先,网络通信是聊天程序的基础,通常使用TCP或UDP协议。在Java...