我最近刚学java,在看韩顺平讲java网络编程(项目是仿QQ)的时候,有个问题,他定义了客户端的静态socket,部分代码如下:
客户端:
public class QqClientConServer {
public static Socket s;
public boolean sendLoginInfoToServer(Object o)
{
.....
s=new Socket("127.0.0.1",9999);
}}
服务端:
public class MyQqServer {
public MyQqServer()
{try {ServerSocket ss=new ServerSocket(9999);
while(true)
{Socket s=ss.accept();}
客户端在发送的时候:ObjectInputStream ois=new ObjectInputStream(QqClientConServer.s.getInputStream());每个用户发送和接收都是这个s。
但是我在测试的时候发现每个客户端都和服务器端对应个socket,客户端绝不是一个socket。
但它又是通过静态共享s发送和接受的,这是怎么回事呢?有高手能解释下吗?
客户端:
public class QqClientConServer {
public static Socket s;
public boolean sendLoginInfoToServer(Object o)
{
.....
s=new Socket("127.0.0.1",9999);
}}
服务端:
public class MyQqServer {
public MyQqServer()
{try {ServerSocket ss=new ServerSocket(9999);
while(true)
{Socket s=ss.accept();}
客户端在发送的时候:ObjectInputStream ois=new ObjectInputStream(QqClientConServer.s.getInputStream());每个用户发送和接收都是这个s。
但是我在测试的时候发现每个客户端都和服务器端对应个socket,客户端绝不是一个socket。
但它又是通过静态共享s发送和接受的,这是怎么回事呢?有高手能解释下吗?
ss.accept();这一句是一直到监听是否有客户端连接。(会一直阻塞)
当有客户端连接上后,会创建一个Socket实例,一个客户端会对应一个Socket实例。
而你说的那个s只不过是一个对象的引用。