package socketTest;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.io.OutputStream;
import java.io.InputStream;public class socketTest extends Thread
{
private Socket s;
public socketTest(Socket s)
{
this.s = s;
}
public void run()
{
try
{
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
int data;
while(true)
{
if('q' != (data = System.in.read()))
{
os.write(data);
if('q' != (data = is.read()))
{
System.out.write(data);
}
else
{
break;
}
}
else
{
os.write('q');
break;
}
}
//os.write(-1);这里并不能通过这一句来使客户端跳出while循环语句,因为read方法只是在到达流的末端的时候才返回-1 os.close();
is.close();
s.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void server()//静态,便于在main里面调用
{
try
{
ServerSocket ss = new ServerSocket(5000);
while(true)
{
Socket s = ss.accept();
new socketTest(s).start();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void client()
{
try
{
Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 5000);
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
int data;
while(true)
{
if('q' != (data = is.read()))
{
System.out.write(data);
if('q' != (data = System.in.read()))
{
os.write(data);
}
else
{
os.write('q');
break;
}
}
else
{
break;
}
}
os.close();
is.close();
s.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
if(args.length > 0)
{
server();
}
else
{
client();
}
}
}
在命令行下
这个程序用java socketTest.socketTest 1 启动服务器端
然后用 java socketTest.socketTest启动客户端
然后首先是服务器端向客户端发送信息,我输入一串字符之后,回车,这时候客户端并没有显示任何信息
然后转到客户端来,输入一串字符之后回车,这时候却在客户端显示出了服务器端发来的信息,然后在服务器端又输入一串字符,服务器端也显示课客户端发来的信息
请问这是为什么呢?这和这个程序的代码里面描述的运行步骤是不一样的啊
百思不得其解
谢谢