晕倒,serversocket一般只用一个端口,你倒好,每次都重新生成一个不同端口的serversocket......
public void run() {
try {
ss = new ServerSocket(port); //这个要放到循环
while (true) {System.out.println("正在等待连接.....");
client = ss.accept();
new Thread(){
public void run(){
new ChatFrame(name, client).setVisible(true);
}
}.start();
}
} catch (IOException ioe1) {
System.out.println("Can't set up user thread" + ioe1);
}
这只是针对你的优化,像你这种Swing程序,尽量少用Thread
public void run() {
try {
ss = new ServerSocket(port); //这个要放到循环
while (true) {System.out.println("正在等待连接.....");
client = ss.accept();
new Thread(){
public void run(){
new ChatFrame(name, client).setVisible(true);
}
}.start();
}
} catch (IOException ioe1) {
System.out.println("Can't set up user thread" + ioe1);
}
这只是针对你的优化,像你这种Swing程序,尽量少用Thread
解决方案 »
- 如何在命令行中运行指定的java文件
- 准备j2ee方面找工作,没有项目经验请问我该如何添写简历,难道简历不写项目经验
- 运行下面的Applet程序出问题???
- 关于取oracle里面图片字段的问题?
- 如何存取sqlserver2000中类型为text的字段和Access数据库中类型为文本的字段
- 关于clone的问题
- 如何使用反反编译程序jade
- How to check DateTime(dateTimeForma:dd/mm/yyyy HH:MM:SS)
- 继承了一个jcomponet类生成一个组件,将组件放在一个jpanel中,想要设置组件的tooltiptext
- 求一遍历树的算法!!!(UP有分!)急
- java编写服务器问题
- 如何显示透明的图片
ServerSocket监听那里的
new ChatFrame(name, client).setVisible(true);
这句话一执行,直到你的这个窗口关闭,下面的代码都不走了
(这要根据你的ChatFrame怎么写的来决定)解决办法
开个线程去启动ChatFrame
跟你分享下我的以前做这个的思路:
socket的TCP同步方式:
并非客户端直接发数据给客户端而是通过服务端进行转发;
客户端发送数据给服务端,进而由服务端再转发到该数据的接收者,
服务端要开两个线程,一个用于开端口监听客户端的连接,另一个用于读取客户端发送的数据进而进行转发。
监听的线程没监听到一个客户端连接上就将此客户端的socket放入Map集合中并启动一个读取这个socket数据的线程。以便后面的数据的传输。
客户端将数据放到封装的数据类(javabean)的对象中,用ObjectOutputStream把这个对象发送到服务端。
大体的思路是这样,更多细节的东西可以加我QQ:372267279交流