String.valueOf(Socket s)

SealedBook 2009-10-04 11:53:52
想巩固一下J2SE的内容,最终决定做一个模仿QQ的聊天程序,因为这个小程序里几乎包含了J2SE的大部分知识。有人会说:你这不就是个C/S的通讯吗。 你这个不就是个什么什么吗。
是的,我这个就是一个小东西,因为不会所以我才做动手做。

我程序的大概思路是:某一个用户登录,通过服务器把自己的信息和在线好友的信息全部下载到本地,这里好友的信息包括Socket的一部分内容,我想在某一个用户发起对好友会话时候新new一个TCP或UDP的链接。
但是,目前看来是不可以的,因为如果这么做的话,对方要是走路由器的话,那么信息就不会接收到。

于是我想到用服务器进行转发(这里我不知道腾讯是不是这么做的,用服务器转发消息?如果知道的朋友可以告诉我一下)
因为用服务器转发是在服务器端保留用户的Socket信息,通过getOutPutStream来进行通讯;所以我还有另一种想法:
客户登陆时候我保存一些信息,那么我可不可以用这些信息给转变成一个Socket呢?
也就是强制类型转换,这样的话我就可以把信息存到数据库中,等某个用户需要时再从数据库中拿出相关信息 进行类型转换,变成Socket。

我的问题就是:1.这种类型转换可能实现么?如何实现?
2.腾讯公司是用服务器转发消息吗?

在这里先谢谢各位!
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SealedBook 2009-10-08
  • 打赏
  • 举报
回复
自己顶一下...继续等待论坛里的大哥大姐们的回答!
SealedBook 2009-10-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mymoflx 的回复:]
好主意,但不知道怎么实现??
[/Quote]
是啊,不知道怎么去实现,不知道怎么去用这些数据包装成一个对应的socket对象
SealedBook 2009-10-06
  • 打赏
  • 举报
回复
自己顶一下...继续等待论坛里的大哥大姐们的回答!
mymoflx 2009-10-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sealedbook 的回复:]
我想的是把A这个ServerSocket里的信息保存到数据库中,当B想用的时候在从数据库中取出来,再给包装成B所需要的对象。可是不知道能不能这么做
[/Quote]
好主意,但不知道怎么实现??
SealedBook 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kindazrael 的回复:]
Java P2P 通信 非C/S模式通信
[/Quote]
是不是可以利用server来进行一些服务性的操作呢?比如为P2P做一些基础准备,为用户提供好友的port
AldisZhan 2009-10-04
  • 打赏
  • 举报
回复
Java P2P 通信 非C/S模式通信
SealedBook 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ckw1988 的回复:]
客户端A在连上服务器端后也用ServerSocket监听一个端口,然后把这个端口的信息发到服务器,放着。

另一个客户端B想连这个客户端A,服务器就把这个客户端A的ServerSocket所监听的端口信息发给B
[/Quote]

我想的是把A这个ServerSocket里的信息保存到数据库中,当B想用的时候在从数据库中取出来,再给包装成B所需要的对象。可是不知道能不能这么做
SealedBook 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ckw1988 的回复:]
通过和服务器连接的socket发送信息,然后让服务器中转实现起来比较方便,就不说了。

我也考虑过客户端直接通信的问题,我的想法是:

客户端A在连上服务器端后也用ServerSocket监听一个端口,然后把这个端口的信息发到服务器,放着。

另一个客户端B想连这个客户端A,服务器就把这个客户端A的ServerSocket所监听的端口信息发给B,B再往A的监听端口发请求,A端接到请求新建一个线程管理这个连接,然后继续监听端口。

就这样。
[/Quote]

先谢谢你哈!你这个想法我大概能明白,是不是说你想在用户A成功登陆后 在自己的客户端起一个ServerSocket,之后吧这个对象发送到服务器,让服务器保留,当其他用户想与A通讯后 用这个服务器中保存的对象进行连接?
那如果是这样的话,为什么不直接让服务器保存A登陆后的一个Socket呢?这样的话也能达到同样的效果呀。
舷Kelvin 2009-10-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 sealedbook 的回复:]
客户登陆时候我保存一些信息,那么我可不可以用这些信息给转变成一个Socket呢?
也就是强制类型转换,这样的话我就可以把信息存到数据库中,等某个用户需要时再从数据库中拿出相关信息 进行类型转换,变成Socket。
[/Quote]

API文档:socket是两台机器间通信的端点。

你第一句里说的客户登陆时候的信息保存为socket,应该是指客户端和服务器端之间的socket吧

你第二句里说的拿出相关信息。你的意思是拿出表示客户端和服务器端连接的socket给那个“某个用户需要”里说的用户吗?
舷Kelvin 2009-10-04
  • 打赏
  • 举报
回复
通过和服务器连接的socket发送信息,然后让服务器中转实现起来比较方便,就不说了。

我也考虑过客户端直接通信的问题,我的想法是:

客户端A在连上服务器端后也用ServerSocket监听一个端口,然后把这个端口的信息发到服务器,放着。

另一个客户端B想连这个客户端A,服务器就把这个客户端A的ServerSocket所监听的端口信息发给B,B再往A的监听端口发请求,A端接到请求新建一个线程管理这个连接,然后继续监听端口。

就这样。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧