`

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基本通信的学习 里面有使用的方法 欢迎一起学习!

    Java Socket 聊天通信演示代码

    这个Java Socket 聊天通信演示代码将涵盖上述基本概念,帮助初学者理解如何使用Java实现网络通信。实际的代码会包含更多的细节,如错误处理、多线程管理和用户界面交互等。通过学习和实践这个示例,你可以进一步提升...

    Socket通信基本流程图.docx

    Socket 通信基本流程图 在计算机网络通信中,Socket 是一...Socket 通信基本流程图是 Socket 通信机制的核心组成部分,了解 Socket 通信基本流程图对于深入理解 Socket 通信机制和解决 Socket 通信问题具有重要意义。

    C# Socket 同步通信

    首先,我们来了解Socket的基本概念。Socket是操作系统提供的网络编程接口,它允许应用程序通过网络发送和接收数据。在C#中,`System.Net.Sockets`命名空间提供了Socket类,用于创建和管理Socket对象。 在C#中实现...

    windows下socket通信代码

    在Windows环境下进行网络编程时,Socket通信是一种常用的技术。Socket接口是操作系统提供的网络通信API...通过实践上述代码,初学者可以掌握Windows下Socket通信的基本原理和操作,为进一步深入网络编程打下坚实基础。

    Mina+Socket通信

    Socket通信的基本步骤包括:创建ServerSocket,等待客户端连接,创建Socket对象,通过输入/输出流进行数据交换,最后关闭连接。 在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口...

    c++ socket通信库

    Socket基本概念 - **Socket接口**: 是操作系统提供的编程接口,用于在网络中建立和维护连接,进行数据传输。它将复杂的网络协议细节封装起来,使得程序员可以专注于应用程序的逻辑。 - **套接字(Socket)**: 是...

    基于socket通信的javaDH通信实现

    Java中的Socket通信是一种基于TCP/IP协议的网络编程方式,它允许两台计算机通过网络进行双向通信。在本项目中,“基于socket通信的javaDH通信实现”是利用Java语言实现的一种安全通信机制,其中融入了Diffie-Hellman...

    Linux socket双机通信

    1. **Socket基本概念**: - **Socket接口**:Socket是进程间通信的一种方式,它提供了进程间网络通信的能力。在操作系统中,每个Socket都由一个唯一的整数(Socket标识符或Socket号)来标识。 - **Socket地址**:...

    Socket 同步通信 系列教程——1

    本文将围绕标题和描述展开,详细阐述Socket同步通信的基本原理、步骤以及相关知识点。 首先,我们需要理解什么是Socket。Socket在计算机网络中扮演着桥梁的角色,它提供了进程间通信(IPC,Inter-Process ...

    C#Socket通信稳定完整版类库实例

    Socket通信在IT行业中是网络编程的基础,特别是在C#这样的多平台开发环境中,Socket通信库的使用至关重要。...通过理解Socket通信的基本原理和C#中的相关类库,开发者可以构建出高效、稳定的服务端和客户端应用程序。

    MFC基于Socket、TCP协议局域网通信

    9. **文件名称列表"Socket基本通信"**: 这可能是一个包含示例代码或教程的文件,其中可能涵盖了以上步骤的详细实现,包括如何创建和管理Socket,如何处理数据的发送和接收,以及如何在MFC环境中整合Socket通信。 ...

    计算机网络实验设计-利用socket进行双机通信-源代码

    在实际操作中,你需要先理解Socket的基本原理,然后阅读和分析提供的Client和Server源代码,理解它们如何建立连接、交换数据以及关闭连接。通过这个实验,你将深入理解网络通信的基础,并掌握Socket编程技术。

    matlab环境下socket通信

    首先,要理解Socket通信的基本概念。Socket可以视为通信的两端,一个作为服务器端(Server Socket),等待客户端的连接请求;另一个作为客户端端(Client Socket),主动发起连接请求。一旦连接建立,双方就可以通过...

    Android基于局域网socket通信

    首先,我们需要理解Socket的基本概念。Socket是网络通信的一种接口,它提供了进程间通信(IPC)的能力,让两个设备能够通过Internet协议(IP)地址和端口号建立连接。在Android中,我们可以使用Java的内置Socket类来...

    简单的socket通信

    在本文中,我们将深入探讨"简单的socket通信",包括服务端和客户端的基本概念、实现方式以及如何在Visual Studio 2015环境下进行开发。 首先,我们需要了解什么是Socket。Socket在计算机网络中是一个接口,它为应用...

    基于socket简单通信协议实现

    一、Socket基本概念 Socket,通常称为套接字,是网络编程中的一个抽象概念,用于在网络上的两个进程间建立通信连接。在TCP/IP协议栈中,Socket接口提供了多种协议(如TCP、UDP)的编程方法。TCP Socket提供面向连接...

    socket通信完整实例

    以上就是Socket通信的基本流程和原理,实际应用中,可能还需要处理异常、超时、多线程/多进程等问题,以提高程序的健壮性和并发能力。通过学习和实践Socket通信,你将能够构建起网络应用的基础,例如聊天程序、文件...

    socket通信文件传输

    1. **Socket基本概念**: Socket,也称为“套接字”,是网络通信中的一个抽象概念,它代表了两台机器之间的一个连接端点。在TCP/IP模型中,Socket接口提供了应用层与传输层之间的交互,允许应用程序发送和接收数据...

    C#Socket网络通信实现多人聊天

    Socket是网络编程的基本接口,它允许应用程序通过网络发送和接收数据。在C#中,我们可以使用System.Net.Sockets命名空间中的Socket类来创建和操作Socket。Socket可以被用来建立TCP或UDP连接,此处我们讨论的是基于...

Global site tag (gtag.js) - Google Analytics