一个简单的聊天程序,请指点错在哪里了???
一个简单的聊天程序,请指点错在哪里了???分2个程序,服务器和客户,为了方便输入,每个程序都专门建立了一个线程进行写,而主线程负责读
编译没错,运行的效果却不对,请指点:
这个是服务器的:
程序代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest {
public static void main(String[] args) {
new ServerTest(PORT).gogo();
}
private static final int PORT = 400;
private ServerSocket server;
private Socket socket;
private PrintWriter writer;
private BufferedReader reader;
private BufferedReader in; //用户写
private Runnable writeThread;
private String humanStr;
private String clientStr;
public ServerTest(int port){
try{
server = new ServerSocket(port);
System.out.println("Server 已经建立...");
}
catch(Exception e1){
e1.printStackTrace();
}
}
public void gogo(){
try{
System.out.println("in gogo()...");
socket = server.accept();
System.out.println("Client 已经连接...");
in = new BufferedReader(new InputStreamReader(System.in));
writer = new PrintWriter(socket.getOutputStream());
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writeThread = new Runnable(){
public void run(){
try {
while((humanStr = in.readLine()) != null){
System.out.println("Server: " + humanStr);
writer.write(humanStr + "\n");
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
};
new Thread(writeThread).start();
//System.out.println("before read");
while((clientStr = reader.readLine()) != null){
System.out.println("Client: " + clientStr + "\n");
}
//System.out.println("after read");
in.close();
writer.close();
reader.close();
socket.close();
server.close();
}
catch(Exception e3){
e3.printStackTrace();
}
}
}
这个是客户端的:
程序代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class ClientTest {
public static void main(String[] args) {
new ClientTest(PORT).gogo();
}
private static final int PORT = 400;
private Socket socket;
private InetAddress address;
private PrintWriter writer;
private BufferedReader reader;
private BufferedReader in; //用户写
private Runnable writeThread;
private String humanStr;
private String serverStr;
public ClientTest(int port){
try{
address = InetAddress.getLocalHost();
socket = new Socket(address,port);
}
catch(Exception e1){
e1.printStackTrace();
}
}
public void gogo(){
try{
in = new BufferedReader(new InputStreamReader(System.in));
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream());
writeThread = new Runnable(){
public void run(){
try {
while((humanStr = in.readLine()) != null){
System.out.println("Client: " + humanStr + "\n");
writer.write(humanStr + "\n");
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
};
new Thread(writeThread).start();
//System.out.println("before read");
while ((serverStr = reader.readLine()) != null){
System.out.println("Server: " + serverStr + "\n");
}
//System.out.println("after read");
in.close();
reader.close();
writer.close();
socket.close();
}
catch(Exception e3){
e3.printStackTrace();
}
}
}
求指教哇!!!谢谢。 --------------------编程问答-------------------- 程序太长了 --------------------编程问答-------------------- 想了很久也没有头绪,求帮助啊! --------------------编程问答-------------------- 没刷新流啊,应该加这句
--------------------编程问答-------------------- 你想要什么效果,说出来把 --------------------编程问答--------------------
writer.flush();
想要server说话,client可以看见; client说话,server也能看见啊 --------------------编程问答--------------------
加过了,还是不对呀!
不能互相通信 --------------------编程问答--------------------
好吧,我又试用了一下,换了个port就可以了。
可能是之前的程序还占用了这个port
换了个port,加了
就OK了!
writer.flush();
谢谢 --------------------编程问答-------------------- 提醒一下:
port不要用1024以内的,这些端口被指派给TCP/IP一些重要的应用程序,不过这个程序也没什么关系...呵呵 --------------------编程问答-------------------- 楼主问题找到了,给你提个意见,你问问题的时候异常现象都没给出来,谁都看不懂的! --------------------编程问答-------------------- 这个程序我也写过,功能是这样的SocketServer建立服务,Client端可以连接。Client端发送的信息会经过Server端转发给所有的Client端。这样就实现了一个类似于多人聊天室的功能。你的程序还可以继续改,做成支持多个客户端连接的就好了。需要的话可以把我的代码分享给你
补充:Java , Java SE