现在遇到了困难:我是用JAVA编写的。因为程序获取用户输入数据这个函数是阻塞函数,所以,程序不得不等待用户的输入后,才能执行下一步,这就导致了就算服务端发送了数据,也不能接受!!另外,接受服务端的数据的函数也是个阻塞函数,同样有这样的问题!
我现在想要实现这样的效果:用户的输入和接受数据不受到阻塞函数的影响!可以方便的发送和接收!
根据问题我写的代码:
服务端:
Code
package chen.chat;
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String [] agrs)
{
try
{
ServerSocket server=new ServerSocket(4000);
System.out.println("服务器开启");
while(true)
{
Socket client=server.accept();
try
{
System.out.println("客户已经连接到服务器");
System.out.println("IP:"+client.getInetAddress().getHostAddress()+"Port: "+client.getPort());
new ServerThread(client).start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
class ServerThread extends Thread
{
private Socket client ;
private BufferedReader bfSystemInput;
private BufferedReader bfSocketInput;
private PrintWriter outer;
public ServerThread(Socket socket)
{
try
{
this.client=socket;
this.bfSystemInput=new BufferedReader(new InputStreamReader(System.in));
this.bfSocketInput=new BufferedReader(new InputStreamReader(this.client.getInputStream()));
this.outer=new PrintWriter(this.client.getOutputStream());
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run()
{
ListernerSystem lstSocket=new ListernerSystem(this.bfSocketInput);
ListenerSystem lstSystem=new ListenerSystem(this.bfSystemInput,this.outer);
lstSocket.start();
lstSystem.start();
}
}
class ListernerSystem extends Thread
{
private BufferedReader bfSocketInput;
public ListernerSystem(BufferedReader bf)
{
this.bfSocketInput=bf;
}
public void run()
{
while(true)
{
String msg=null;
try
{
if((msg=bfSocketInput.readLine())!=null)
{
System.out.println("Your friend say: "+msg);
}
else
{
System.out.println("dsa");
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
class ListenerSystem extends Thread
{
private BufferedReader bfSystemInput;
private PrintWriter outer;
public ListenerSystem(BufferedReader bf,PrintWriter out)
{
this.bfSystemInput=bf;
this.outer=out;
}
public void run()
{
while(true)
{
try
{
String msg=null;
if((msg=bfSystemInput.readLine())!=null)
{
this.outer.println("You Say: "+msg);
}
else
{
System.out.println("dsa");
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
package chen.chat;
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String [] agrs)
{
try
{
ServerSocket server=new ServerSocket(4000);
System.out.println("服务器开启");
while(true)
{
Socket client=server.accept();
try
{
System.out.println("客户已经连接到服务器");
System.out.println("IP:"+client.getInetAddress().getHostAddress()+"Port: "+client.getPort());
new ServerThread(client).start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
class ServerThread extends Thread
{
private Socket client ;
private BufferedReader bfSystemInput;
private BufferedReader bfSocketInput;
private PrintWriter outer;
public ServerThread(Socket socket)
{
try
{
this.client=socket;
this.bfSystemInput=new BufferedReader(new InputStreamReader(System.in));
this.bfSocketInput=new BufferedReader(new InputStreamReader(this.client.getInputStream()));
this.outer=new PrintWriter(this.client.getOutputStream());
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run()
{
ListernerSystem lstSocket=new ListernerSystem(this.bfSocketInput);
ListenerSystem lstSystem=new ListenerSystem(this.bfSystemInput,this.outer);
lstSocket.start();
lstSystem.start();
}
}
class ListernerSystem extends Thread
{
private BufferedReader bfSocketInput;
public ListernerSystem(BufferedReader bf)
{
this.bfSocketInput=bf;
}
public void run()
{
while(true)
{
String msg=null;
try
{
if((msg=bfSocketInput.readLine())!=null)
{
System.out.println("Your friend say: "+msg);
}
else
{
System.out.println("dsa");
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
class ListenerSystem extends Thread
{
private BufferedReader bfSystemInput;
private PrintWriter outer;
public ListenerSystem(BufferedReader bf,PrintWriter out)
{
this.bfSystemInput=bf;
this.outer=out;
}
public void run()
{
while(true)
{
try
{
String msg=null;
if((msg=bfSystemInput.readLine())!=null)
{
this.outer.println("You Say: "+msg);
}
else
{
System.out.println("dsa");
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
客户端:
Code
package chen.chat;
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String [] agrs)
{
try
{
Socket client=new Socket("127.0.0.1",4000);
System.out.println("连接服务器成功");
BufferedReader bfSystemInput=new BufferedReader(new InputStreamReader(System.in));
BufferedReader bfSocketInput=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
new ListenSocket(bfSocketInput).start();
new ListenControlInput(bfSystemInput,out).start();
}
catch(UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
class ListenSocket extends Thread
{
private BufferedReader bfSocketInput;
public ListenSocket(BufferedReader bf)
{
this.bfSocketInput=bf;
}
public void run()
{
while(true)
{
String msg=null;
try
{
if((msg=bfSocketInput.readLine())!=null)
{
System.out.println("Your friend say: "+msg);
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
class ListenControlInput extends Thread
{
private BufferedReader bfSystemInput;
private PrintWriter out;
public ListenControlInput(BufferedReader bf,PrintWriter out)
{
this.bfSystemInput=bf;
this.out=out;
}
public void run()
{
String msg=null;
while(true)
{
try
{
msg=this.bfSystemInput.readLine();
if(msg!=null)
this.out.println("You Say: "+msg);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
package chen.chat;
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String [] agrs)
{
try
{
Socket client=new Socket("127.0.0.1",4000);
System.out.println("连接服务器成功");
BufferedReader bfSystemInput=new BufferedReader(new InputStreamReader(System.in));
BufferedReader bfSocketInput=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
new ListenSocket(bfSocketInput).start();
new ListenControlInput(bfSystemInput,out).start();
}
catch(UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
class ListenSocket extends Thread
{
private BufferedReader bfSocketInput;
public ListenSocket(BufferedReader bf)
{
this.bfSocketInput=bf;
}
public void run()
{
while(true)
{
String msg=null;
try
{
if((msg=bfSocketInput.readLine())!=null)
{
System.out.println("Your friend say: "+msg);
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
class ListenControlInput extends Thread
{
private BufferedReader bfSystemInput;
private PrintWriter out;
public ListenControlInput(BufferedReader bf,PrintWriter out)
{
this.bfSystemInput=bf;
this.out=out;
}
public void run()
{
String msg=null;
while(true)
{
try
{
msg=this.bfSystemInput.readLine();
if(msg!=null)
this.out.println("You Say: "+msg);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
执行后,客户端或者服务端并不会接收到数据。
我将发送数据和接收数据 分开写入一个线程里面了。
大虾帮忙看下。。。小弟忙活2天了。。。