Java中开发一个基于Socket的TCP通信的短信接口一般要多久呢?

n_e_e_d 2013-07-04 05:26:35
对于一个完全没接触过socket和多线程的新手,开发一个http接口要多久呢?

首先利用socket和服务端通信,然后再对发送的报文做处理,最后做一个http接口让别人使用,整个功能实现下来要多久呢?报文是自定义格式的!
...全文
382 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
autumn134 2013-07-16
  • 打赏
  • 举报
回复
首先回答楼主关于协议处理的问题: 按我的理解,客户端与服务器之间的通讯协议应该是双方约定的私有通讯协议(即数据排列格式由双方约定),设计者在制定协议格式时,必须考虑协议的唯一标识性,即每条通讯报文都具有唯一的特征属性(比如报文编号)。楼主如果作为客户端向服务器发送请求,只要在发送之前,将报文内容存到内存中即可,当收到服务器的反馈报文时,根据报文编号找到对应的请求报文(反馈报文与请求报文编号一致,或有其他关联规则)。 另外,这个问题和多线程没有关系,就算开再多的线程,也是使用同一条TCP链路进行通讯,每条线程读取到的内容是随机的,所以靠多线去进行报文对应,没有意义。 然后就是关于程序通讯机制的问题了: 本例中双方通讯是使用的TCP方式,也就是全双工长连接的方式。理论上,任何使用TCP方式通讯的链路,都需要使用心跳机制来确定对方的在线情况,因为TCP是保持连接的,而实际运行时此前建立的连接可能被中断,从而导致后续的发送请求失败。正常的TCP链路close,程序是可以监测到的(关闭时,系统会自动发送一条链路断开的报文),但是异常断开的话,程序是监测不到的(如直接拔掉网线、交换机故障等),对方会仍然认为链路可用,所以需要使用心跳机制,定时发送报文,证明双方状态正常。 所以楼主需要使用异步的方式来管理通讯。 MINA提供了现成的框架,对用户而言,网络通讯变成了触发式,不再需要用户显式的死循环轮询读socket了,当指定链路收到数据报文的时候,会自动调用指定的接口函数,楼主只要在那里写下相关逻辑即可。
oh_Maxy 2013-07-12
  • 打赏
  • 举报
回复
引用 7 楼 n_e_e_d 的回复:
[quote=引用 6 楼 oh_Maxy 的回复:] 在网上找几个Socket的小例子,练练手也好。SOAP是一种协议,嗯,可以先不管。
即一方如有多条报文要发送,可一口气发送所有报文,然后再逐条接收应答,而不必每发送一条报文都等待应答后才发送下一条。 请教一下,他文档里是这样介绍的!我在客户端发送完所有数据以后,他会返回给我很多条信息,我要怎么知道那条信息对应着我发送的信息呢!要怎么处理服务端给我发送回来的这些信息呢?因为他们都在一块呢!要先把这些数据存储起来吗? 另外在帮忙参考下这个异常流程 3.3 异常流程 一旦客户端连接到服务器,无论是否已经登录,都需要每隔一定时间向服务器发送心跳报文,服务器收到后会返回心跳应答报文。这个时间的长度由服务器端预先确定。 如果一个客户端-服务器连接中,客户端持续没有发送任何报文到服务器的时间长度超过上述时间,服务器会判定为客户端已掉线,并切断连接。客户端需要重新连接并登录才能继续和服务器交互。 也就是说有可能在我没发送数据的时候,服务端也有可能给我发信息,我要如何接收处理呢?就是读取或者存储起来在处理吗?还是要怎么弄呢?[/quote] 请求如果想发多个,要启动多个线程实现,每个线程实现自己的请求、响应处理。 与服务端的连接情况,是单独一个线程实现。此线程只负责连接测试功能的消息解析。
n_e_e_d 2013-07-12
  • 打赏
  • 举报
回复
引用 5 楼 autumn134 的回复:
看你需求大小,如果是简单的少量链接,网上百度下简单的socket例子,复制下就行,新手的话,最多5天也完了。 如果是大量链接并发管理的话,建议先去搜下MINA框架的相关支持,掌握下基本例子的编写,熟悉过程大约需要一周,剩下实际开发就很快了,接口都是现成的,只写逻辑就行。
帮忙看下上面那个问题可以吗?
n_e_e_d 2013-07-12
  • 打赏
  • 举报
回复
引用 4 楼 Shan_mei 的回复:
[quote=引用 楼主 n_e_e_d 的回复:] 对于一个完全没接触过socket和多线程的新手,开发一个http接口要多久呢? 首先利用socket和服务端通信,然后再对发送的报文做处理,最后做一个http接口让别人使用,整个功能实现下来要多久呢?报文是自定义格式的!
首先, 第一步和第二布网上都有现成的例子, 可以直接拿过来, 稍作修改。 http接口的协议应该是要跟对方的商议之后而定的, 根据他们的需求, 定义个接口便可。 整个流程下来不难[/quote] 帮忙看下我上面的那个问题可以吗?
n_e_e_d 2013-07-12
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
在网上找几个Socket的小例子,练练手也好。SOAP是一种协议,嗯,可以先不管。
即一方如有多条报文要发送,可一口气发送所有报文,然后再逐条接收应答,而不必每发送一条报文都等待应答后才发送下一条。 请教一下,他文档里是这样介绍的!我在客户端发送完所有数据以后,他会返回给我很多条信息,我要怎么知道那条信息对应着我发送的信息呢!要怎么处理服务端给我发送回来的这些信息呢?因为他们都在一块呢!要先把这些数据存储起来吗? 另外在帮忙参考下这个异常流程 3.3 异常流程 一旦客户端连接到服务器,无论是否已经登录,都需要每隔一定时间向服务器发送心跳报文,服务器收到后会返回心跳应答报文。这个时间的长度由服务器端预先确定。 如果一个客户端-服务器连接中,客户端持续没有发送任何报文到服务器的时间长度超过上述时间,服务器会判定为客户端已掉线,并切断连接。客户端需要重新连接并登录才能继续和服务器交互。 也就是说有可能在我没发送数据的时候,服务端也有可能给我发信息,我要如何接收处理呢?就是读取或者存储起来在处理吗?还是要怎么弄呢?
oh_Maxy 2013-07-12
  • 打赏
  • 举报
回复
我的意思是,一个请求对应一个响应。可能宏观上看,一下丢给你N个请求,但是实际操作的时候,我们还是要一个个处理的,然后将所有的响应处理好再返回给调用者。 或者并发构建多个线程(这样就不能在主线程里操作响应了)。这样似乎不符合你的要求了。或者这些线程公用一个响应管理列表,每结束一个响应,就放到这个公用列表里,主线程定时查看列表,是否达到与请求相同的个数了,然后一并发给调用者(这只是理论上的)。
n_e_e_d 2013-07-12
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
在网上找几个Socket的小例子,练练手也好。SOAP是一种协议,嗯,可以先不管。
现在的的问题是,要如何处理服务端返回信息的问题! 现在的情况是这样的,服务端是一次性把我以前发送的所有数据的返回信息在一次读取中全部返回!这么多条的返回信息,我要怎么知道哪条信息对应哪条发送的数据呢?还有服务端也有可能主动给我发送信息,我要如何知道服务端给我发送信息了呢?难道要单独开一个线程来接收服务端给我返回的信息,把这些信息全部存储起来!然后再在这些信息中逐条的读取我想要的信息吗?
oh_Maxy 2013-07-05
  • 打赏
  • 举报
回复
在网上找几个Socket的小例子,练练手也好。SOAP是一种协议,嗯,可以先不管。
autumn134 2013-07-05
  • 打赏
  • 举报
回复
看你需求大小,如果是简单的少量链接,网上百度下简单的socket例子,复制下就行,新手的话,最多5天也完了。 如果是大量链接并发管理的话,建议先去搜下MINA框架的相关支持,掌握下基本例子的编写,熟悉过程大约需要一周,剩下实际开发就很快了,接口都是现成的,只写逻辑就行。
lt3 2013-07-05
  • 打赏
  • 举报
回复
引用 楼主 n_e_e_d 的回复:
对于一个完全没接触过socket和多线程的新手,开发一个http接口要多久呢? 首先利用socket和服务端通信,然后再对发送的报文做处理,最后做一个http接口让别人使用,整个功能实现下来要多久呢?报文是自定义格式的!
首先, 第一步和第二布网上都有现成的例子, 可以直接拿过来, 稍作修改。 http接口的协议应该是要跟对方的商议之后而定的, 根据他们的需求, 定义个接口便可。 整个流程下来不难
n_e_e_d 2013-07-05
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
有现成的soap技术,为啥非要用socket实现呢?是要学习用的么
因为我在客户端和服务端通信要用到socket呀!他给的只有IP和端口
n_e_e_d 2013-07-05
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
有现成的soap技术,为啥非要用socket实现呢?是要学习用的么
现成的soap技术是指什么呢?可以给说下吗?
oh_Maxy 2013-07-05
  • 打赏
  • 举报
回复
有现成的soap技术,为啥非要用socket实现呢?是要学习用的么

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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