`

socket基本通信

阅读更多

1.服务端
        while(true){
                       
                        Socket socket = null;
                        socket = serverSocket.accept();
                        InputStream iStream = socket.getInputStream();
                        byte[] buff = new byte[1024];
                        int len = -1;
                        StringBuffer pp = new StringBuffer();
                        while((len = iStream.read(buff))!=-1){                //read 方法返回的是读到的字符数
                                pp.append(new String(buff,0,len));            //所以这里采用这种方式来做
                        }
                        System.out.println(pp.toString());
                        OutputStream oStream = socket.getOutputStream();
                        oStream.write("back".getBytes());
                        socket.shutdownOutput();
                        System.out.println(socket.isClosed());
                        socket.close();

                }

要点:
        1.两端通信的时候最好是采用同样的方式。
        2.一端给另一端发信息的时候,最好采用 socket.shutdownOutput();这样另一端才会接受到,或者采用socket.close();
    不过在服务器端,最好是采用socket.shutdownOutput(),因为这样不会关闭socket,socket的关闭给客户端来做,减少通信的开销。
    如果一定要关闭服务端的socket,那么就放在finlly{}块中。   
 
2.客户端

                        Socket socket = new Socket("127.0.0.1",9001);
                        OutputStream oStream = socket.getOutputStream();
                        oStream.write("abc".getBytes());
//                        oStream.close();
                        socket.shutdownOutput();                //最好是采用这种做法
                        System.out.println(socket.isClosed());
//                        oStream.flush();
//                        socket.shutdownOutput();
                        InputStream iStream = socket.getInputStream();
                        byte[] buff = new byte[1024];
                        int len = -1;
                        StringBuffer pp = new StringBuffer();
                        while((len = iStream.read(buff))!=-1){
                                pp.append(new String(buff,0,len)); //最好是采用这种方式
                        }
                        System.out.println(pp.toString());
                        socket.close();


一 注意的一点:在使用 PrintWriter && BufferedReader 的时候最好设置
        PrintWriter pWriter = new PrintWriter(oStream,true); 设置为true 直接发送,不必等到缓冲区满
二 如果关闭了 OutputStream oStream = socket.getOutputStream();
        oStream 也相当于关闭了socket.





使用 BufferedReader && PrintWriter

1.BufferedReader 通过
       
                                String msg = null;
                                while((msg=br.readLine())!=null){ //通过readLine来读取
                                        System.out.println(msg);
                                        pw.println(msg+"1111");   //通过pringln推送到另一端,而不是write()方法是写入到一个字符串中,不是发送到另一端    
                                        socket.shutdownOutput();
                                }

分享到:
评论
1 楼 cunjia 2010-09-27  
请问下,为什么不加socket.shutdownOutput()句服务器就收不到信息?
服务器用的NIO多线程实现,
当我加上socket.shutdownOutput()虽然服务器能收到客户端的消息,但客户端就退出了它的线程,这是什么原因呢?

相关推荐

    socket基本通信学习

    关于socket基本通信的学习 里面有使用的方法 欢迎一起学习!

    C# SOCKET通信基本流程图

    C# SOCKET通信基本流程图

    socket通信与串口通信(二选择一)

    Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、...

    C#socket异步通信模板

    实现了最基本功能的C# winform下的socket异步通信,不需要做任何修改就可以运行,默认是在本机上运行

    Socket通信程序设计

    Socket程序基本机理 Java Socket

    Windows Socket 通信网络编程

    实现功能:Socket通信,分为客户端和服务端两个程序,实现客户端与服务端间的通信,功能包括 1)客户端请求得到服务端的当前时间和主机名称; 2)客户端请求得到所有与服务端连接的其他客户端的信息;3)客户端向...

    使用RSA和DES保护的Socket通信.zip

    基本要求:将DES加密算法应用于网络通信,使用RSA算法自动分配密钥,设计好界面,可验证自动生成的密钥和加解密正确的结果。 具体实现要求:客户端和服务器建立连接后,客户端生成一个随机DES密钥;服务器生成一个随机RSA...

    Unity和Qt入门项目-基于Unity+Qt的Socket通信演示项目(学习Socket双向通信机制)源码.zip

    本项目的目的是为了熟悉Socket通信的基本流程,以及在不同平台之间的通信。同时学习基本的Unity3D和Qt的使用方法。 数据包括Qt向Unity发送的物体动作数据,以及Unity向Qt发送的物体状态数据。 本项目是一个基础的...

    使用socket和DTU通信.doc

    为了方便网络编程,90年代初,由microsoft联合了...socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个socket接口来实现。

    linux Socket进程通信程序设计

    Linux Socket进程通信的基本原理和Socket数据结构,运用Socket编写一个聊天程序,客户程序和服务程序在局域网内建立虚拟电路连接,能相互收发信息,进行通信。完整的报告、心得、源程序、流程图等

    基于Socket网络通信协议的应用研究

    套接字是通信的基本元件,两个进程为了进行通信,首先必须设置套接字。通俗讲,套接字相当于由其名字连接起来的通信线路的端点,这种连接不仅适用于本地进程之间的通信,而且也使用语远地进程之间的通信。用套接字...

    Socket实现客户端与服务端通信源码

    本程序演示了Socket通信的基本原理,非常适合初学者。程序分为两部分:服务器端与客户端,实际上客户端也可以充当服务器端,本程序两端的区别在于服务器端要发送数据必须要有客户端的连接作为基础,而客户端没有此...

    Socket通信实现多人聊天应用

    套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机...

    应用SOCKET实现网络通信

    介绍了SOCKET编程的基本概念,详细说明了SOCKET编程的一些注意事项,应用SOCKET实现异步通信和组广播技术,列举了应用SOCKET编程过程中的几点想法,对实际应用有较强的指导作用。

    java基于socket通信

    基于socket、mysql数据库和java组件、线程实现的qq基本通信

    delphi源码基本的Socket通信完善下

    delphi源码基本的Socket通信完善下 delphi源码基本的Socket通信完善下

    API实现socket通信示例

    socket的基本应用,针对初学者,老鸟们可以掠过。本示例采用Delphi2010编写

    基本的socket通信

    同delphi写的基本的socket通信例程,简单 有参考价值

    python 实现socket通信实例之client.py

    python 实现socket通信实例之client.py socket又称套间字或者...上述Socket功能函数是从传输层协议TCP或者UDP中抽象出来的,一个基本的socket通信可以通过固定的功能函数实现。这里插一句,IP协议是工作在网络层的。

    Socket通信基本流程图.docx

    Socket通信基本流程图.docx

Global site tag (gtag.js) - Google Analytics