单独使用tcp/ip,或udp协议写的程序都可以实现网络的一对一聊天。可是我想实现与qq相类的可以有多个好友有选择的聊天。
可是服务器端怎么处理接收到客户端发送的消息?因为客户端发送的消息有登陆消息与好友聊天消息。
及服务器端怎么处理发送到客户端的消息?因为客户端只有好友列表怎么样根据消息信息传给对应的好友对话框中?弄了好久也没有想出好的处理方法!
请大家帮帮忙。谢谢。
可是服务器端怎么处理接收到客户端发送的消息?因为客户端发送的消息有登陆消息与好友聊天消息。
及服务器端怎么处理发送到客户端的消息?因为客户端只有好友列表怎么样根据消息信息传给对应的好友对话框中?弄了好久也没有想出好的处理方法!
请大家帮帮忙。谢谢。
如果是udp也是类似的原理
对于实现单发的协议可以让它继承Protocol,并添加属性String receive表示接受人。
客户端可以发送new Protocol("userName", "用户名")
new SingleProtocal("Message","内容","接受人")
new Protocol("Message", "内容")
具体过程:
服务器端可发送new Protocol("userList", "用户名")和new Protocol( "Message", "内容 ")。 客户端: //一登录就向服务器发送new Protocol( "userName ", "用户名 ")
while(join){
//读取服务器端发来的消息
Protocal p=(Protocal)dis.readObject();
if(p的消息头是message)
显示消息
else if(p的消息头是userList){
根据p的消息体,更改List
}
} 服务器端: while(running){
//读取客户端发来的协议
Protocal p=(Protocal)dis.readObject();
if(p的消息头是message){
if(p instanceof SingleProtocal){//这个事单发消息
向指定的用户发送消息
}else{
遍历所有客户端,向它们发送new Protocol("Message ", "内容 ")
}
}
else if(p.getHeader().equals( "userName ")){
将p的消息体中的内容加入用户列表list中
遍历所有客户端,向它们发送new Protocol( "userList ", "用户名 ")
}
}
我现在的想法是纯用tcp/ip对话,客户端登陆时给服务器发送消息,消息包含客户端用户信息,这样客户端与服务器都记录了用户ID号。当主动与好友聊天时创建的对话框消息也是发送到服务器,消息内容包括自己ID,对方ID,服务器读取对方ID,把这个消息发送到这个ID客户端,客户端从消息中读取消息发送方ID然后在好友列表中找到这个ID,并创建这个ID对话框....服务器用多线程,为每个客户端创建一个线程,我说的想法就是每个线程中进行的.
对这个问题你有什么好的解决方法吗?不会线程中套线程吧?
本人自己写的是这样的我是菜鸟
额。。这个ID和TCP/IP有什么冲突吗?
实际代码里,接收使用客户端的Socket,发送使用服务端的Socket 就是这么用的啊
我这里说的接收就单纯的指客户端收服务端送来的消息,发送指客户端向服务端发送消息
一个读,一个写 就这么简单
感觉用户聊天的话,这个线程不需要一直开着,觉得在服务器端有个线程池,当有需要转发消息的时候,分配一个线程,在转发完消息之后,就放回到线程池中。
有个方法是:
首先,用户登录的时候,可以记录下来用户的IP和端口,在转发消息的时候,消息的内容是 “发送人&接收人& 消息体” 服务器端根据接收人的id 找到接收人的ip,然后进行转发消息。但感觉这个方法不太好,因为如果只记录ip的话,只能在局域网中使用,因为路由器之类的能扩充ip的数量。