服务器:只是一个媒介,将所有的客户机连接到一起,它只起到传递消息的作用
客户机:也就是用户端,通过服务器实现与其他用户聊天等
简单的服务器和客户机 一对一
多人聊天室 同时启动多个客户机
需要注意的一点是,一旦服务器与客户机连接之后,两者之间是平等的,也就是说,读写消息流都一样
例如:有四个人 甲 乙 丙 丁 四个人
假设 甲是服务器
乙 丙 丁 三人是客户机(也就是用户)
如果乙 丙 丁 三人想互相联系,可以这样:
首先 乙 丙 丁 都先联系上甲
即 甲服务器方 创建连接对象即打开一个端口,循环等待监听 乙 丙 丁的连接进入
乙 丙 丁 客户机方创建连接端口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(); } }