写了个聊天程序,运行后客户端说的话服务器段看不到,服务器说的话客户端也看不到,怎么回事?
代码如下,请各位大虾指导
Server端代码:
import java.net.*;
import java.io.*;
public class Server
{
public static void main(String[] args) throws IOException
{
ServerSocket serversocket=null;
Socket s=null;
String toClient;
boolean runable=true;
try{
System.out.println("等待客户端连接");
while(true)
{
serversocket=new ServerSocket(4000);
s=serversocket.accept();
DataOutputStream dataout=new DataOutputStream(s.getOutputStream());
DataInputStream datain=new DataInputStream(s.getInputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String ip=""+s.getInetAddress();
System.out.println("IP:"+ip+"登陆");
ReceiveClientThread readClientThread=new ReceiveClientThread();
readClientThread.start();
while(runable){
toClient=in.readLine();
if(toClient.equals("quit")){ break;}
dataout.writeUTF(toClient);
}
dataout.close();
datain.close();
in.close();
s.close();
serversocket.close();
}
}catch(IOException e){System.err.println("Failed to connect");}
}
}
class ReceiveClientThread extends Thread{ String fromClient;
boolean runable=true;
public ReceiveClientThread(){}
public void run()
{
while(runable){
try{
ServerSocket serversocket=new ServerSocket(4000);
Socket s=serversocket.accept();
DataInputStream datain=new DataInputStream(s.getInputStream());
fromClient=datain.readUTF();
String ip=""+s.getInetAddress();
System.out.println(ip+"说:"+fromClient);
if(fromClient.equals("quit"))
{
System.out.println("Client exit");
break;
}
}catch(Exception e){runable=false;}
}
}
}
Client端代码如下:
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String[] args) throws IOException
{
Socket s=null;
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
boolean runable=true;
String toServer;
try{
s=new Socket("192.0.0.168",4000);
System.out.println("you have connected the server");
}catch(IOException e){System.out.println("Can not find Server!");}
ReceiveServerThread readServerThread=new ReceiveServerThread();
readServerThread.start();
DataOutputStream dataout=new DataOutputStream(s.getOutputStream());
DataInputStream datain=new DataInputStream(s.getInputStream());
while(runable)
{
toServer=in.readLine();
if(toServer.equals("quit")) { break; }
dataout.writeUTF(toServer);
}
dataout.close();
datain.close();
in.close();
s.close();
}
}
class ReceiveServerThread extends Thread
{
String fromServer="";
boolean runable=true;
public ReceiveServerThread(){}
public void run()
{
while(runable)
{
try
{
ServerSocket serversocket=new ServerSocket(4000);
Socket s=serversocket.accept();
DataInputStream datain=new DataInputStream(s.getInputStream());
fromServer=datain.readUTF();
System.out.println("Server说:"+fromServer);
if(fromServer.equals("quit"))
{
System.out.println("Server exit");
break;
}
}catch(Exception e){runable=false;}
}
}
}
代码如下,请各位大虾指导
Server端代码:
import java.net.*;
import java.io.*;
public class Server
{
public static void main(String[] args) throws IOException
{
ServerSocket serversocket=null;
Socket s=null;
String toClient;
boolean runable=true;
try{
System.out.println("等待客户端连接");
while(true)
{
serversocket=new ServerSocket(4000);
s=serversocket.accept();
DataOutputStream dataout=new DataOutputStream(s.getOutputStream());
DataInputStream datain=new DataInputStream(s.getInputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String ip=""+s.getInetAddress();
System.out.println("IP:"+ip+"登陆");
ReceiveClientThread readClientThread=new ReceiveClientThread();
readClientThread.start();
while(runable){
toClient=in.readLine();
if(toClient.equals("quit")){ break;}
dataout.writeUTF(toClient);
}
dataout.close();
datain.close();
in.close();
s.close();
serversocket.close();
}
}catch(IOException e){System.err.println("Failed to connect");}
}
}
class ReceiveClientThread extends Thread{ String fromClient;
boolean runable=true;
public ReceiveClientThread(){}
public void run()
{
while(runable){
try{
ServerSocket serversocket=new ServerSocket(4000);
Socket s=serversocket.accept();
DataInputStream datain=new DataInputStream(s.getInputStream());
fromClient=datain.readUTF();
String ip=""+s.getInetAddress();
System.out.println(ip+"说:"+fromClient);
if(fromClient.equals("quit"))
{
System.out.println("Client exit");
break;
}
}catch(Exception e){runable=false;}
}
}
}
Client端代码如下:
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String[] args) throws IOException
{
Socket s=null;
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
boolean runable=true;
String toServer;
try{
s=new Socket("192.0.0.168",4000);
System.out.println("you have connected the server");
}catch(IOException e){System.out.println("Can not find Server!");}
ReceiveServerThread readServerThread=new ReceiveServerThread();
readServerThread.start();
DataOutputStream dataout=new DataOutputStream(s.getOutputStream());
DataInputStream datain=new DataInputStream(s.getInputStream());
while(runable)
{
toServer=in.readLine();
if(toServer.equals("quit")) { break; }
dataout.writeUTF(toServer);
}
dataout.close();
datain.close();
in.close();
s.close();
}
}
class ReceiveServerThread extends Thread
{
String fromServer="";
boolean runable=true;
public ReceiveServerThread(){}
public void run()
{
while(runable)
{
try
{
ServerSocket serversocket=new ServerSocket(4000);
Socket s=serversocket.accept();
DataInputStream datain=new DataInputStream(s.getInputStream());
fromServer=datain.readUTF();
System.out.println("Server说:"+fromServer);
if(fromServer.equals("quit"))
{
System.out.println("Server exit");
break;
}
}catch(Exception e){runable=false;}
}
}
}
解决方案 »
- 遇到这种异常,不知道该怎么办,请高手看看吧
- swing中的jtable-在线等,急
- [闭月羞花猫]问一个使用POI,在excel单元格中设置 斜线的问题!!!!!!!
- 谁有JAVA的源程序
- Spring 问题!
- 请问List = new AraayList(20);是不是 向下转型? 比List多那那些东西?
- Java中paintComponent怎么用?
- 请问怎么把命令行中输入的信息(比如格式化时的信息),输入到我自己指定的窗口中去,并且是同步的。
- 小弟才學 JavaMail 安書上的例子寫了下面的代碼 編譯通過但是 運行不了 幫忙看看!!!!
- Java能否实现实现对UAC请求与控制?
- 散分 + 问关于制作小游戏
- System.in.read读入字符串出现错误呢?
IO控制是否正确.
服务端已经:
serversocket=new ServerSocket(4000);
s=serversocket.accept();
然后创建了子线程类:
ReceiveClientThread readClientThread=new ReceiveClientThread();
在子线程内,又
serversocket=new ServerSocket(4000);
s=serversocket.accept();
端口已经被占用了,再一次new,肯定会跳到catch()
而客户端的子线程里面,居然又再一次serversocket=new ServerSocket(4000);
如果你是在一台机器上测试,不知道这个4000端口要用多少次呀。