现在有一个端口,有一个IP,还有一些报文的格式介绍。现在想问几个问题,请各位大牛给指点下:我是客户端,我要是通过这个IP和端口和服务器端联系,是不是要使用Socket通信呢?还有没有别的方法呢?
你们可以给我提供一些Socket通信的源码吗?最好有注释的!连接也可以!现在对Socket是一点都不知道呀!
要怎么通信的呢?还有使用Socket如何向服务器端发送信息呢?我现在的信息就是报文形式的!报文要如何处理使用起来会方便点呢?给服务端发送信息后,他给我返回的也是报文的形式,要如何解析呢?socket通信源代码注释

解决方案 »

  1.   

    http://blog.csdn.net/gxy3509394/article/details/7899923 请看这篇博文写的不错,精心推荐。
      

  2.   

    谢谢,顺便问下那个报文要如何使用呢?有没有什么好的解析和生成报文的方法或Jar包可以使用呢?
      

  3.   

    报文什么格式啊,听说过XML,json,字符流,字节流。真心的孤陋寡闻了,同求这个神马格式啊?
      

  4.   

    这个报文怎么来的,真没见过。。
    我在使用Socket通信的时候向服务器端传送的信息就是这个报文是吗?虽然感觉是,但是总感觉不太确定!可以给我一个肯定的答案吗?
    我是这样理解的,不知道对不对:
    就是报文就相当于一个字符串。就好像我写一个方法要传一个参数,这个参数就是这个报文。至于报文的处理就是对这个字符串的处理了。是吗?谢谢帮助!
      

  5.   

    嗯,服务端怎么实现的呢?能否安你说的,封装到Request里,当做一个字符串传给他?感觉服务端应该会提供一个调用的方法的吧?
      

  6.   

    谢谢你,我看看还能不能问他们那边要些资料,现在感觉资料太少了,什么也不知道!
    嗯,估计一个良好的服务系统,不会直接让你socket发请求啥的~
      

  7.   

    试一下用hession的方式开接口,然后把你那所谓的报头转换成JSON进行传递。
      

  8.   

    Socket的例子很多,网上找个随便调试一下就行了。接收到报文之后,首先统一以字符处理。然后根据标志位,
    标志位是字符,继续以字符方式处理;
    标志位是字节,就用字节方式处理,会用到byte相关的。
      

  9.   

    这个自定义协议的,什么格式,怎么解码之类的问下server端啊,二次开发也得搞清楚那边怎么定的协议啊
      

  10.   

    您好:我想请问一下就是我在客户端如何实现和服务端的通信呢?
    现在要用到Socket的长连接,我在服务端要实现这个长连接呢?还有就是我如何使用俩个线程呢,一个是读取服务端返回的数据,一个是向服务端发送数据!方便的话,可以加下您的QQ吗?
      

  11.   

    您好:我想请问一下就是我在客户端如何实现和服务端的通信呢?
    现在要用到Socket的长连接,我在服务端要实现这个长连接呢?还有就是我如何使用俩个线程呢,一个是读取服务端返回的数据,一个是向服务端发送数据!方便的话,可以加下您的QQ吗?
    我们用的是SOAP协议,不过任何服务器,都应该接收响应后,会有一个返回消息的,这里不需要启动两个线程,同一个线程发送消息,再处理返回的响应就可以了吧。
    QQ不怎么上的(白天也上不了),在你的CSDN空间给你留言了。
      

  12.   

    如果需要把你计算机上的一些报文发送到例外一台计算机。
    那么你需要一个发送程序,而接受计算机需要一个接收程序。
    对于发送端来说,你需要知道对面的IP和端口即可进行发送,对于接收端来说,你只需要接收就OK了。至于报文什么的。
    不管是什么,直接用一个字符串或者字节数组打包发过去即可。(字节流)至于如何解析,那是接受者的工作了,不属于网络传输的事情。
      

  13.   

    您好:我想请问一下就是我在客户端如何实现和服务端的通信呢?
    现在要用到Socket的长连接,我在服务端要实现这个长连接呢?还有就是我如何使用俩个线程呢,一个是读取服务端返回的数据,一个是向服务端发送数据!方便的话,可以加下您的QQ吗?
    我们用的是SOAP协议,不过任何服务器,都应该接收响应后,会有一个返回消息的,这里不需要启动两个线程,同一个线程发送消息,再处理返回的响应就可以了吧。
    QQ不怎么上的(白天也上不了),在你的CSDN空间给你留言了。
    我已经加您QQ了,完了有时间同意下哈!
      

  14.   

    您好:我想请问一下就是我在客户端如何实现和服务端的通信呢?
    现在要用到Socket的长连接,我在服务端要实现这个长连接呢?还有就是我如何使用俩个线程呢,一个是读取服务端返回的数据,一个是向服务端发送数据!方便的话,可以加下您的QQ吗?
    我们用的是SOAP协议,不过任何服务器,都应该接收响应后,会有一个返回消息的,这里不需要启动两个线程,同一个线程发送消息,再处理返回的响应就可以了吧。
    QQ不怎么上的(白天也上不了),在你的CSDN空间给你留言了。上面21楼有我在客户端和服务端的交互流程,您给看下,要怎么处理这个发送和接收的问题呢!
      

  15.   

    3.1 登录流程(连接后)
    --发送过来的报文带上用户登录信息;登录成功,在服务器也记录一个成功登录的账号信息;服务器收到的任何一个消息,都校验其登录信息是否合法,是否已登录,来判断是否丢弃此消息。3.2 业务流程(成功登录后)
    --这个可以将客户端作为Thread的子类,每次请求,都new一个客户端线程类处理。对于服务端主动发送过来的消息的处理,可以考虑做一个专门的线程,监控服务端主动发送的消息(此时可以将服务端当做客户端,客户端当服务端)3.3 异常流程
    --服务端做个时间计数器,超时就将用户登录信息注销;客户端的每次请求操作,都将该时间计数器清零。以上只是一些建议,我也没有具体实现的代码,需要楼主查资料实现啦!LZ可以选择性的参考一下,最好根据实际情况分析是否可行。
    另外,别您啊您的,别扭啊,呵呵~
      

  16.   

    打字习惯了,我会注意下的!
    现在正在查找一些资料呢!我现在是客户端,我要和服务端通信的。就目前看得资料来说感觉要用到socket的长连接,但是我发现很多都把长连接指向了服务端,按我的意思理解的是长连接就是客户端和服务端建立连接后,在发送完数据以后不会立即关闭连接,而是通过心跳报文保持连接的,目前的困惑就是在客户端要如何建立一个长连接呢,我都是写一个socket连接后一发送数据再一接收最后不都关闭socket了吗?要如何保持他是一直开着呢!还有我向服务端发送数据以后,接收服务端给我发来的信息的时候,可以读取到,但是他却一直卡在读取数据那一步了,就走不到下面的代码了!
      

  17.   

    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