我对客户机与服务器的理解

服务器:只是一个媒介,将所有的客户机连接到一起,它只起到传递消息的作用

客户机:也就是用户端,通过服务器实现与其他用户聊天等


简单的服务器和客户机    一对一

多人聊天室  同时启动多个客户机

需要注意的一点是,一旦服务器与客户机连接之后,两者之间是平等的,也就是说,读写消息流都一样

例如:有四个人  甲  乙  丙  丁  四个人
    假设   甲是服务器
    乙  丙  丁  三人是客户机(也就是用户)

扫描二维码关注公众号,回复: 1334034 查看本文章

如果乙  丙  丁 三人想互相联系,可以这样:


首先  乙  丙 丁  都先联系上甲
即  甲服务器方 创建连接对象即打开一个端口,循环等待监听 乙 丙 丁的连接进入
    乙  丙 丁 客户机方创建连接端口Socket 其中传入参数服务器方的IP地址和端口号

服务器甲和客户机 乙 丙 丁分别通过端口得到输入输出流
这样  乙 丙 丁 和甲之间好像就有了一个相互通信的管道

如果 乙 丙 丁之间要互相通信可以这样:
即:客户机方只要有sendMsg(String msg)(发送消息的方法)就Ok了
如:乙把想说的话通过端口的输出流传送给服务器甲,
注意:甲方有readString()  (读消息的方法)sendMsg(String msg) (写消息的方法)
甲通过读乙发送过来的消息  并将其发送给丙 和丁
丙 和 丁也一样 依此类推。

所有的客户机将写的消息先发送给服务器,服务器然后读消息,将读到的所有消息发送给所有客户,客户们再将所有消息添加到文本区JTextArea


服务器的功能是
   读客户机发来的消息即客户机写消息发送给服务器,服务器再将从客户机写来的消息读一下将其发送给所有用户

基本构架是  有一个link按钮   有一个send按钮   
               消息输入框 JTextField
              接收消息的文本区JTextArea

当点击link按钮时,实现客户机与服务器连接
当点击send按钮时,可以将消息输入框JTextField中的内容显示到接收消息的文本区JTextArea中

注意:读方法会阻塞,所以要将其放在一个线程中
    客户机端只写不读

服务器端:ChatServer类
public class ChatServer{


public static void main(String args[]){


}


}

//注意:读的方法在一个线程里面,不在这个类里面

//创建服务器连接对象的方法

public void upServer(int port){

ServerSocket ss=new ServerSocket(port);

while(true){

//监听连接端口    注意:要循环监听
Socket client=ss.accept();

//由端口得到输入输出流
OutputStream ous=client.getOutputStream();
InputStream ins=client.getInputStream();

     }
  }



猜你喜欢

转载自1043693084-qq-com.iteye.com/blog/1586320