求助啊,大牛们!IP,端口,Socket,给我讲下
现在有一个端口,有一个IP,还有一些报文的格式介绍。现在想问几个问题,请各位大牛给指点下:
我是客户端,我要是通过这个IP和端口和服务器端联系,是不是要使用Socket通信呢?还有没有别的方法呢?
你们可以给我提供一些Socket通信的源码吗?最好有注释的!连接也可以!现在对Socket是一点都不知道呀!
要怎么通信的呢?
还有使用Socket如何向服务器端发送信息呢?我现在的信息就是报文形式的!报文要如何处理使用起来会方便点呢?给服务端发送信息后,他给我返回的也是报文的形式,要如何解析呢? 好把,给分我把。
[解决办法]
这个报文怎么来的,真没见过。。
[解决办法]
用mina吧,能省不少事
[解决办法]
试一下用hession的方式开接口,然后把你那所谓的报头转换成JSON进行传递。
[解决办法]
Socket的例子很多,网上找个随便调试一下就行了。
接收到报文之后,首先统一以字符处理。然后根据标志位,
标志位是字符,继续以字符方式处理;
标志位是字节,就用字节方式处理,会用到byte相关的。
[解决办法]
这个自定义协议的,什么格式,怎么解码之类的问下server端啊,二次开发也得搞清楚那边怎么定的协议啊
[解决办法]
如果需要把你计算机上的一些报文发送到例外一台计算机。
那么你需要一个发送程序,而接受计算机需要一个接收程序。
对于发送端来说,你需要知道对面的IP和端口即可进行发送,对于接收端来说,你只需要接收就OK了。
至于报文什么的。
不管是什么,直接用一个字符串或者字节数组打包发过去即可。(字节流)
至于如何解析,那是接受者的工作了,不属于网络传输的事情。
[解决办法]
3.1 登录流程(连接后)
--发送过来的报文带上用户登录信息;登录成功,在服务器也记录一个成功登录的账号信息;服务器收到的任何一个消息,都校验其登录信息是否合法,是否已登录,来判断是否丢弃此消息。
3.2 业务流程(成功登录后)
--这个可以将客户端作为Thread的子类,每次请求,都new一个客户端线程类处理。对于服务端主动发送过来的消息的处理,可以考虑做一个专门的线程,监控服务端主动发送的消息(此时可以将服务端当做客户端,客户端当服务端)
3.3 异常流程
--服务端做个时间计数器,超时就将用户登录信息注销;客户端的每次请求操作,都将该时间计数器清零。
以上只是一些建议,我也没有具体实现的代码,需要楼主查资料实现啦!LZ可以选择性的参考一下,最好根据实际情况分析是否可行。
另外,别您啊您的,别扭啊,呵呵~
[解决办法]
Socket用的不多,写了一个如何保持长连接的类(比较糙,凑合看吧):
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketManager
{
private Socket socket = null;
//socket初始化方法
public SocketManager() throws UnknownHostException, IOException
{
//这里如果出现异常,socket还是会有问题,建议在外层调用
if (null == socket
[解决办法]
socket.isClosed())
{
socket = new Socket("10.137.28.189", 8888);
}
}
//socket关闭
public void closeSocket()
{
if (null == socket
[解决办法]
socket.isClosed())
{
return;
}
try
{
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
//只提供getter方法
public Socket getSocket()
{
return socket;
}
}
每个请求线程,都初始化一个SocketManager实例。使用连接时,get即可,不要对其close操作,直到不想保存此连接,就closeSocket