永发信息网

java程序看不懂 讲解 注视

答案:2  悬赏:0  手机版
解决时间 2021-05-02 03:41

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){}

}

}

}

最佳答案

这不是socket编程嘛1



里面就那两个类+接收流 输出流,看原理,做通讯.

全部回答

网络编程呗

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

打电话的时候发起会话的人首先要拨打想打的电话号码(一般是客户端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时,程序停止,结束通信。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这个世界上有 什么东西放不 下 ?
临床心理学的就业前景如何
为啥我空间传不上图片?
取保候审的问题
15岁了怎么更快的增高?
电脑的颜色怎么调
陕坝农商银行奋斗支行怎么去啊,有知道地址的
问下现在哪个牌子的本子好用些?
用来鉴别苏打和小苏打两种白色固体的方法是(
三星I908E刷了WN6.5,请问还能刷回定制的WM6.
花都有招钟点工吗?
剃刀引挚加12大概要改多少次?
大话2转身指导
人不谈恋爱,会有什么不利?
8.7 8.17的星座语分别是什么?
推荐资讯
人最终会输给什么?
CF除了水晶头盔还有什么能那么弄
肠胃不好能吃三七粉吗,40岁男人吃三七粉好吗
怎么我不能冲啊
相机自动开机,又自动关机
从福州到福田要多少小时
我如何从别人的好友上退出
是找一个我爱的人过一生好呢?还是找一个爱我
女人到底是怎样的感情动物?
白茫洲学校这个地址在什么地方,我要处理点事
邮车任务在哪个人那里接
梦幻西游69LG玄彩娥武器怎么打符石
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?