写了个聊天程序,运行后客户端说的话服务器段看不到,服务器说的话客户端也看不到,怎么回事?
代码如下,请各位大虾指导
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;}
}
}
}
System.out.println("Server说:"+fromServer);
这两句不行么?
我开始写了个一对一的,就是这样写的能出来啊
楼上大哥继续指点
不过可以告诉你一个思路。
把socket传入这个thread,呵呵。而不是在thread里来获得socket.
Over
public ReceiveServerThread(Socket s){
}
mofeir专家,你这样大体一说我也理解不了,可否说详细些,该怎么实现?
谢谢各位了
serversocket=new ServerSocket(4000);
s=serversocket.accept();
可在子线程内,又
serversocket=new ServerSocket(4000);
s=serversocket.accept();
端口已经被占用了,再一次new,肯定不行
而且客户端的子线程里面,怎么又有serversocket=new ServerSocket(4000);