java程序聊天室发送不了_JAVA聊天室客户端不显示内容,服务端没问题的原因总算找到了(其实问题不是这个)...

o(�口�)o刚才打了很多内容,结果忘了网络断开了,没法自动存稿。结果一发布把内容都弄没了。气死,不写了。

今天讲的是JAVAEE,讲的很快,主要就重点或者是和SE不一样的才过一下,差不多的就跳过去,让我们自己看PPT。。。。。。(没掉的内容)。。。。。。

上周做了个简单的聊天室功能代码,一直出错。发的内容只能在服务端看到,客户端却看不到。字符串一直等待接收,但就是收不到。对着老师的代码改了好几遍,还是不行。还让老师帮忙看了很久,也还是没发现问题。今天下午又试着做了一遍,不过代码不熟,还是按照自己以前的代码写的,老问题。晚上又看着老师的代码学了一遍,总算好了,然后发现了问题在哪里了。

原来是服务端遍历写入内容时没另外用方法,和服务端读取内容在一个try catch语句里面,结果一直没法在那边等着。

这博文,改一下标题,希望如果有同样问题的能看到。原标题:JAVASE_day_024

贴一下老师的代码吧,我的差不多,就不贴了。

所先,得先跑服务端。

那天问老师,老师说不可能因为不用方法就导致客户端不显示,所以肯定还是有别的问题。因为测试了一下,如果把他的代码,方法那边去掉,还是一样可以。但我实在看不出来我的问题在哪。只好,贴上来,如果有大神看到,希望可以指出来。

package com.xinbo;

import java.awt.BorderLayout;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

public class TestServer {

private static JTextArea jta=new JTextArea();

private static ServerSocket server;

private static ArrayList list=new ArrayList();//接收客户端的信息

private static ExecutorService exec;

static class Talk implements Runnable{

private Socket client;

private DataInputStream fromclient;

private DataOutputStream toclient;

String msg;

public Talk(Socket client){

this.client=client;

try {

fromclient=new DataInputStream(client.getInputStream());

} catch (IOException e) {

}

}

@Override

public void run() {

try {

while((msg=fromclient.readUTF())!=null){

msg="["+client.getPort()+"]说:"+msg;

jta.append(msg+"\n");

xiaoMessage();

}

} catch (IOException e) {

}

}

public void xiaoMessage(){

for(Socket client:list){

try {

toclient=new DataOutputStream(client.getOutputStream());

toclient.writeUTF(msg);

} catch (IOException e) {

}

}

}

}

public static void main(String[] args) {

JFrame f=new JFrame("服务端");

f.add(new JScrollPane(jta), BorderLayout.CENTER);

f.setBounds(100, 100, 400, 300);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setVisible(true);

try {

server=new ServerSocket(1314);

exec=Executors.newCachedThreadPool();

jta.append("服务器已开启");

Socket client =null;

while(true){

client=server.accept();

list.add(client);

exec.execute(new Talk(client));

}

} catch (IOException e) {

}

}

}

然后就是跑客户端,可以开好几个窗口。

package com.xinbo;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class TestClient {

private static JPanel p=new JPanel();

private static JTextField jtf=new JTextField();

private static JTextArea jta=new JTextArea();

private static DataInputStream fromserver;

private static DataOutputStream toserver;

private static JButton jb=new JButton("发送");

public static void main(String[] args) {

JFrame f=new JFrame("客户端");

p.setLayout(new BorderLayout());

JPanel p2=new JPanel();

p2.setLayout(new BorderLayout());

p2.add(jtf,BorderLayout.CENTER);

p2.add(jb,BorderLayout.EAST);

p.add(p2,BorderLayout.SOUTH);

p.add(jta,BorderLayout.CENTER);

f.add(p);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setBounds(100, 100, 400, 300);

jb.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String str=jtf.getText().toString();

try {

toserver.writeUTF(str);

toserver.flush();

} catch (IOException e1) {

}finally{

jtf.setText("");

}

}

});

Socket client;

try {

client=new Socket("localhost",1314);

fromserver=new DataInputStream(client.getInputStream());

toserver=new DataOutputStream(client.getOutputStream());

while(true){

String msg=fromserver.readUTF();

if(msg!=null){

jta.append(msg+"\n");

}

}

} catch (UnknownHostException e1) {

} catch (IOException e1) {

}

}

}

我的代码

package com.xinbo;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import javax.swing.JFrame;

import javax.swing.JTextArea;

public class TextServer {

static ServerSocket ss;

static ArrayList list=new ArrayList<>();

static JTextArea jta;

static ExecutorService e;

static class Talk implements Runnable{

String msg;

DataInputStream dis;

DataOutputStream dos;

Socket s;

public Talk(Socket s){

this.s=s;

try {

dis=new DataInputStream(s.getInputStream());

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void run() {

try {

while((msg=dis.readUTF())!=null){

msg="["+s.getPort()+"]说: "+msg;

jta.append(msg+"\n");

}

for(Socket s:list){

dos=new DataOutputStream(s.getOutputStream());

dos.writeUTF(msg);

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) throws IOException {

JFrame jf=new JFrame("服务端");

jta=new JTextArea();

jta.append("服务端已开启\n");

jf.add(jta);

jf.setVisible(true);

jf.setBounds(100, 100, 400, 300);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

e=Executors.newCachedThreadPool();

ss=new ServerSocket(1912);

Socket s=null;

while(true){

s=ss.accept();

list.add(s);

e.execute(new Talk(s));

}

}

}

package com.xinbo;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class TestClient {

static JTextField jtf=new JTextField(26);;

static JTextArea jta=new JTextArea();;

static DataOutputStream  dos;

static DataInputStream dis;

public static void main(String[] args){

JFrame jf=new JFrame("客户端");

JPanel jp=new JPanel();

JButton jb=new JButton("发送");

jp.add(jtf);jp.add(jb);

jf.add(jta,BorderLayout.CENTER);

jf.add(jp,BorderLayout.SOUTH);

jf.setBounds(100, 100, 400, 300);

jf.setVisible(true);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jb.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

String str=jtf.getText().toString();

try {

dos.writeUTF(str);

dos.flush();//清空dos的输出流

} catch (IOException e) {

e.printStackTrace();

}finally {

jtf.setText("");

}

}

});

//jtf.addKeyListener(new KeyListener() {

//@Override

//public void keyTyped(KeyEvent arg0) {

TODO Auto-generated method stub

//

//}

//@Override

//public void keyReleased(KeyEvent arg0) {

TODO Auto-generated method stub

//

//}

//@Override

//public void keyPressed(KeyEvent key) {

TODO Auto-generated method stub

//if(key.getKeyCode()==KeyEvent.VK_ENTER){

//String str=jtf.getText().toString();

//try {

//dos.writeUTF(str);

//dos.flush();//清空dos的输出流

//} catch (IOException e) {

//e.printStackTrace();

//}finally {

//jtf.setText("");

//}

//}

//}

//});

Socket s;

try {

s=new Socket("localhost",1912);

dis=new DataInputStream(s.getInputStream());

dos=new DataOutputStream(s.getOutputStream());

while(true){

String str= dis.readUTF();

System.out.println(123);

if(str!=null){

jta.append(str+"\n");

}

}

} catch (UnknownHostException e) {

} catch (IOException e) {

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值