有过java socket网络编程经验的人进来指导下
我现在准备写一个像qq一样的网络程序,用java写不过现在我对网络编程还有些疑问,希望大家给我指点下问题一:客户端和服务端不能同用一个bean吧?比如:我从数据库里读出了...
我现在准备写一个像qq一样的网络程序,用java写
不过现在我对网络编程还有些疑问,希望大家给我指点下
问题一:客户端和服务端不能同用一个bean吧?比如:我从数据库里读出了一条数据后用bean封装,然后我把这个bean传到客户端,客户端又该怎么接收呢?
问题二:从客户端发送数据到服务器,服务器又怎么分析客户端发过来的数据是做什么的呢?比如:客户端发送过来的注册信息,登录信息等
wangzhirong57 你好,现在才上网,我看到你的那个聊天程序,做得很好,但是你这个是基于udp的吧?我想做的是tcp的,至于您说的将什么将线程放入哈希表,我不是很明白,主要是我学艺不精哈,我想您至少是个主管级别的人物吧?我问一下您手下有没有写过类似的代码?希望您能将通信的核心代码给我参考一下,谢谢了 展开
不过现在我对网络编程还有些疑问,希望大家给我指点下
问题一:客户端和服务端不能同用一个bean吧?比如:我从数据库里读出了一条数据后用bean封装,然后我把这个bean传到客户端,客户端又该怎么接收呢?
问题二:从客户端发送数据到服务器,服务器又怎么分析客户端发过来的数据是做什么的呢?比如:客户端发送过来的注册信息,登录信息等
wangzhirong57 你好,现在才上网,我看到你的那个聊天程序,做得很好,但是你这个是基于udp的吧?我想做的是tcp的,至于您说的将什么将线程放入哈希表,我不是很明白,主要是我学艺不精哈,我想您至少是个主管级别的人物吧?我问一下您手下有没有写过类似的代码?希望您能将通信的核心代码给我参考一下,谢谢了 展开
4个回答
展开全部
这两个问题都可以通过消息机制来解决,
消息机制就是双方约定的通信语言。
首先:你需要自定义一份双方约定的通信机制,
其次: 对每个连进来的客户按用户ID或IP进行编号存入哈希表,以方便索引用户的Socket通道。 每进来一个客户就 hashtable.put(user.name, socket);
最后:双方都还要有两个缓冲数组(可以是数组Object[],也可以是Vector,Arraylist,Hashtable都可以);
一个叫发送缓冲区,一个叫接收缓冲区。每一个都附带一个管理线程。
向客户端发送消息时,并不是马上就发送,而是将消息推入到发送缓冲区排队,
发送缓冲区的线程会每隔一小片时间后就扫描并 pop出一个可发送的消息。
分析这个消息的源发送者和目的发送者,然后hashtable的索引找到目的发送者的socket通道。并发送.
另一个叫接收缓冲区。 Socket的网络线程不断接收到客户的消息,但不是马上就处理,也不会自己亲自处理,而是压入接收缓冲队列等待缓冲队列来处理,自己休息片段又立马再去接收别的客户发过来的消息。 接收缓冲区有自己的线程,它每sleep一小片刻时间后就扫描队列中有无消息到达,如果有(网络线程刚压进一的),则可以采用监听器模式让监听器处理,如果不想那么复杂也可以自己处理, 会分析消息来源和去向,从去向中分析出将要发送给某人,但自己并不发送,而是直接压入到发送缓冲区(这里就接到前面的发送缓冲区介绍中去了)
最后是消息机制的设计。
我公司的游戏都是由我来设计通信机制,实现三网合一,即手机,PC,电视机顶盒三种客户端同玩一桌麻将游戏
一般java设计的游戏中设计如下:
一. 消息头 二.消息体
消息头设计格式如下: 1. 本消息包长度,以方便解析字节;2. 本消息类型TYPE:如一般消息,游戏消息,大厅消息,聊天消息;3.本消息命令类型COMMAND: 如登陆、个人资料修改、登出、聊天。。。。
消息体设计格式一般根据Type和command不同而有不同。 如聊天消息包含四个字段,String 聊天内容、 User 发送者、 User 接收者、Text文字排版信息
服务端SeverSocket收到这个消息后,压入接收缓冲区, 接收缓冲线程分析其中结构,根据Type和Command的类型实例化出相应消息类, 该消息类能自动将后面的字节流实例化自身的字段。从而得到接收方和发送方, 得到接收方后再将消息封装好压入到发送队列
这个结构除完全适合聊天系统以外,以后要加入新内容将会非常容易!
如果有什么疑问欢迎call我, 我不负责写代码,但可以指点你。 另外,我的回答记录中有用nio设计的聊天室BBS代码。也是帮一个学生做的。你可以看看
消息机制就是双方约定的通信语言。
首先:你需要自定义一份双方约定的通信机制,
其次: 对每个连进来的客户按用户ID或IP进行编号存入哈希表,以方便索引用户的Socket通道。 每进来一个客户就 hashtable.put(user.name, socket);
最后:双方都还要有两个缓冲数组(可以是数组Object[],也可以是Vector,Arraylist,Hashtable都可以);
一个叫发送缓冲区,一个叫接收缓冲区。每一个都附带一个管理线程。
向客户端发送消息时,并不是马上就发送,而是将消息推入到发送缓冲区排队,
发送缓冲区的线程会每隔一小片时间后就扫描并 pop出一个可发送的消息。
分析这个消息的源发送者和目的发送者,然后hashtable的索引找到目的发送者的socket通道。并发送.
另一个叫接收缓冲区。 Socket的网络线程不断接收到客户的消息,但不是马上就处理,也不会自己亲自处理,而是压入接收缓冲队列等待缓冲队列来处理,自己休息片段又立马再去接收别的客户发过来的消息。 接收缓冲区有自己的线程,它每sleep一小片刻时间后就扫描队列中有无消息到达,如果有(网络线程刚压进一的),则可以采用监听器模式让监听器处理,如果不想那么复杂也可以自己处理, 会分析消息来源和去向,从去向中分析出将要发送给某人,但自己并不发送,而是直接压入到发送缓冲区(这里就接到前面的发送缓冲区介绍中去了)
最后是消息机制的设计。
我公司的游戏都是由我来设计通信机制,实现三网合一,即手机,PC,电视机顶盒三种客户端同玩一桌麻将游戏
一般java设计的游戏中设计如下:
一. 消息头 二.消息体
消息头设计格式如下: 1. 本消息包长度,以方便解析字节;2. 本消息类型TYPE:如一般消息,游戏消息,大厅消息,聊天消息;3.本消息命令类型COMMAND: 如登陆、个人资料修改、登出、聊天。。。。
消息体设计格式一般根据Type和command不同而有不同。 如聊天消息包含四个字段,String 聊天内容、 User 发送者、 User 接收者、Text文字排版信息
服务端SeverSocket收到这个消息后,压入接收缓冲区, 接收缓冲线程分析其中结构,根据Type和Command的类型实例化出相应消息类, 该消息类能自动将后面的字节流实例化自身的字段。从而得到接收方和发送方, 得到接收方后再将消息封装好压入到发送队列
这个结构除完全适合聊天系统以外,以后要加入新内容将会非常容易!
如果有什么疑问欢迎call我, 我不负责写代码,但可以指点你。 另外,我的回答记录中有用nio设计的聊天室BBS代码。也是帮一个学生做的。你可以看看
展开全部
将你说的bean序列化后,可以正常接收,接收后从Object转化为你的bean类型就可以了。
其实都是一个问题,传过来的对象所封装的内容,就是客户的注册信息阿。
其实都是一个问题,传过来的对象所封装的内容,就是客户的注册信息阿。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题一:可以的如楼上的人实现serialize接口,用ObjectOutPutStream传输对象
二:可以这样子在bean中实现一个属性,这个属性比如private int type;客户端接受这个对象后读这个属性,
0代表注册,1代表登陆等等
二:可以这样子在bean中实现一个属性,这个属性比如private int type;客户端接受这个对象后读这个属性,
0代表注册,1代表登陆等等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
靠就一个字,我只说一次
强帖留名,最后顶楼上!!!
强帖留名,最后顶楼上!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询