永发信息网

java问题 高手进

答案:3  悬赏:0  手机版
解决时间 2021-05-18 15:53
  • 提问者网友:佞臣
  • 2021-05-18 00:16

import java.io.*; 输入输出包

import java.net.*; 网络包

public class chatSvr 定义chatSvr类

{

public static void main(String[] str)

{

ServerSocket soc;

Socket svrSoc; 创建端口

ObjectOutputStream objOut=null;

ObjectInputStream objIn=null; 输入和输出

Try 以下函数可能会出现异常

{

System.out.println("Waiting for client's connecting...");

soc=new ServerSocket(6666); 本机端口6666

svrSoc=soc.accept(); 等待连接

System.out.println("The client connected, you can Exit this program by type 'QUIT'");

objOut=new ObjectOutputStream(svrSoc.getOutputStream()); 输出客户端的内容

objIn=new ObjectInputStream(svrSoc.getInputStream());接受客户端输入的内容

}catch(Exception e){System.exit(0);}

sendMsgOut send=new sendMsgOut(objOut);

send.start();

getMsgFromClient get=new getMsgFromClient(objIn);

get.start();

}

}

class sendMsgOut extends Thread

{

ObjectOutputStream objOut=null;

public sendMsgOut(ObjectOutputStream out)

{

objOut=out;

}

public void run()

{

String strMsg="";

while(true)

{

try{

strMsg=(new BufferedReader(new InputStreamReader(System.in))).readLine();

objOut.writeObject(strMsg);

if (strMsg.equals("QUIT"))System.exit(0);

}catch(Exception e){}

//System.out.println(strMsg);

}

}

}

class getMsgFromClient extends Thread

{

ObjectInputStream objIn;

public getMsgFromClient(ObjectInputStream in)

{

objIn=in;

}

public void run()

{

String strMsg="";

while(true)

{

try{

strMsg=(String)objIn.readObject();

System.out.println("The client said:"+strMsg);

if (strMsg.equals("QUIT"))System.exit(0);

}catch(Exception e){}

}

}

}

最佳答案
  • 五星知识达人网友:轮獄道
  • 2021-05-18 01:26

网络编程呗


网络编程就像两个人在打电话


打电话的时候发起会话的人首先要拨打想打的电话号码(一般是客户端client)


所拨打的电话那边必须有人时刻监听(一般是服务器)


Java网络编程和打电话的道理一样


服务器需要一个ServerSocket(就像接听电话的人),你调用svrSoc=soc.accept();方法就是在等待着客户端“打电话过来”(如果没有客户端打电话过来,程序就会在这里傻等,称为阻塞),一旦有客户端打电话过来,那么accept方法就返回一个Socket对象就是你的svrSoc,这就好像是你接到打来的电话,找到响起铃声的电话机一样(你可以把Socket对象想象成电话机,客户端也有这样的一个Socket,这样看来想象成打电话就更合理了)。


每一个Socket都可以获得对应的输入和输出流(getOutputStream()和getInputStream()),你可以认为想要传递或接收的数据都是通过这些流来发送或者接收的。你可以想象这两个流就是电话的听筒和话筒(in和out)。

objOut=new ObjectOutputStream(svrSoc.getOutputStream()); 输出客户端的内容


objIn=new ObjectInputStream(svrSoc.getInputStream());接受客户端输入的内容


这两个方法就是获得了这两个流,并且包装为对象输入输出流,方便后面两个进程来使用(这涉及到Java的I/O流,如果你还不清楚就自己看下相关书籍),这种方式称为装饰模式。


下边是启动了两个线程


线程一:sendMsgOut获得了话筒,它不断读取服务器标准控制台的输入信息,只要该信息不是QUIT,就会借助得到的话筒发送给客户端,如果是QUIT则程序停止。


线程二:getMsgFromClient 获得了听筒,它通过听筒监听客户端传送过来的数据,一旦数据到达就输出客户端的信息,直到客户端传递的数据为QUIT时,程序停止,结束通信。


还有什么不明白就追问我

全部回答
  • 1楼网友:玩世
  • 2021-05-18 03:15

注释很清楚了呀,我劝你还是先看看结果在理解会比较好一点。

  • 2楼网友:鱼芗
  • 2021-05-18 02:04
什么问题
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯