/************************************客户端*************************************/package wuhe.chat.client;import javax.swing.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.io.*;
import java.util.*;public class Login extends JFrame
{
public Login()
{
try
{
SocketChannel sc=SocketChannel.open(new InetSocketAddress("www",9000));
PrintWriter pw=new PrintWriter(sc.socket().getOutputStream(),true);
BufferedReader br=new BufferedReader(new InputStreamReader(sc.socket().getInputStream()));
pw.println("注册");
pw.println("personnel");
pw.println("1234");
//下面这里死活接收不到数据
String reMsg=br.readLine();
if(reMsg==null)
{
System.out.println("对方已断开");
}
else
{
System.out.println("返回的是:" + reMsg);
}
}
catch(Exception err)
{
err.printStackTrace();
}
}
public static void main(String[] args)
{
new Login();
}
}
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.io.*;
import java.util.*;public class Login extends JFrame
{
public Login()
{
try
{
SocketChannel sc=SocketChannel.open(new InetSocketAddress("www",9000));
PrintWriter pw=new PrintWriter(sc.socket().getOutputStream(),true);
BufferedReader br=new BufferedReader(new InputStreamReader(sc.socket().getInputStream()));
pw.println("注册");
pw.println("personnel");
pw.println("1234");
//下面这里死活接收不到数据
String reMsg=br.readLine();
if(reMsg==null)
{
System.out.println("对方已断开");
}
else
{
System.out.println("返回的是:" + reMsg);
}
}
catch(Exception err)
{
err.printStackTrace();
}
}
public static void main(String[] args)
{
new Login();
}
}
String reMsg=br.readLine();我只需要读取一次数据就行。无需循环。理论上:如果没有数据可读时,br.readLine();会一直停在这里,直到有数据可以读取,或对方关闭时。
可是我不明白为什么会这样???
//接收的数据
class Receive extends Thread
{
private Vector<String> data;
private String msg;
public Receive()
{
data=new Vector<String>();
}
public void run()
{
try
{
if(true) //原来的是while(true)
{
msg=br.readLine();
if(msg.equals("注册"))
{
data.removeAllElements();
data.addElement("注册");
data.addElement(br.readLine()); //用户名
data.addElement(br.readLine()); //密码
addReceiveData(data);
//如果在这里输出,这样客户端就可以收到了
//pw.println("abc");
}
else
{
}
}
}
catch(Exception err)
{
err.printStackTrace();
}
}
}
msg=br.readLine(); 时
如果在服务器端另一个发送线程中执行:
pw.println("数据"); //这个数据根本就发不出去的。我刚刚又试了另一种方法,我在服务器端的接收类Receive线程中的while(true)中加了一个sleep(2000);while(true)
{
........ sleep(2000);
}这样客户端也能收到消息.
我想可能是服务器端在读取数据时:msg=br.readLine();不能同时在发送数据吧。