`

socket通信简单的阻塞状态案例

 
阅读更多
服务端直到接收到客户端发送的数据才会继续向下执行,接收到客户端的Socket,继续执行流的读写操作来读取和写回数据。关于sockect的更多用法可以参照这篇《基于Socket的Android与PC简单聊天应用的实现》。

客户端Socket:
public class ClientSocket {

    public static void testClientSocket() throws Exception {

        try {
            Socket socket = new Socket("localhost", 8888);
            // setSoTimeOut:设置客户端Socket读取数据的超时时长。
            socket.setSoTimeout(3000);
            // setKeepAlive:该方法指定检测与服务器的链接状态。
            socket.setKeepAlive(true);
            // setTcpNoDelay:Nagle算法;优点很明显,节省了通信的开销。
            socket.setTcpNoDelay(true);
            // setSoLinger:其实该方法和Socket的关闭方法( close() )是有联系的。
            socket.setSoLinger(true, 5);
            // setReceiveBufferSize:设置输入流的缓冲大小。默认情况下,输入流的接收缓冲区是8096个字节(8K)。
            socket.setReceiveBufferSize(1024);
            // 如果你的服务程序停止后想立即重启,不等60秒,而新套接字依旧 使用同一端口,此时 SO_REUSEADDR 选项非常有用。
            socket.setReuseAddress(true);

            OutputStream os = socket.getOutputStream();
            // 给服务端传值
            os.write("你好 I'm client".getBytes());
            byte[] readbyte = new byte[40];
            InputStream ins = socket.getInputStream();
            ins.read(readbyte);
            // 打印服务端返回值
            System.out.println(new String(readbyte));
            System.out.println("打印服务端返回值");
        } catch(SocketException e){
            e.printStackTrace();
        }catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            testClientSocket();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


服务端的serverSocket:
public class TestServerSocket {

    public static void testServerSocketMethod() throws Exception {
        ServerSocket serverSocket = null;
        Socket socket2 = null;
        try {
            //1.注册ip和端口,注册了一个服务器程序
            serverSocket = new ServerSocket(8888);
            //2.等待接收连接请求,并且连接成功后创建Socket。
            // 收到客户端发送的数据才会继续向下执行。
            socket2 = serverSocket.accept();

            System.out.println("connect ok");
            //3.获得连接对象的网络流,从而进行网络数据传输
            // 获得客户端数据
            byte[] readbyte = new byte[40];
            InputStream ins = socket2.getInputStream();

            ins.read(readbyte);
            System.out.println("打印客户端返回值");
            System.out.println(new String(readbyte));

            // 往客户端发数据
            OutputStream os = socket2.getOutputStream();
            os.write("你好 I'm server".getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

        try {
            testServerSocketMethod();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

    .net socket通信案例-简单版

    本案例主要关注的是一个简单的Socket通信实现,适合初学者学习理解网络编程的基本概念和方法。 首先,我们需要了解Socket的基本概念。Socket在计算机网络中是一种进程间通信机制,它允许两个网络应用程序通过TCP或...

    Socket通信工具小案例,使用异步处理数据

    在这个“Socket通信工具小案例”中,我们探讨的是如何使用异步处理来优化数据传输效率,这对于理解和掌握Socket编程及其在多线程环境下的应用至关重要。 首先,我们要明白Socket是网络通信的基石,它提供了进程间的...

    java web使用Socket通信案例源码

    这个"java web使用Socket通信案例源码"可能包含了一个简单的Servlet实现服务器端逻辑,一个简单的HTML页面作为前端界面,以及客户端和服务端的Socket通信代码。通过分析和学习这个案例,你可以更深入地理解Java Web...

    Socket通信案例三

    在这个"Socket通信案例三"中,我们可能将深入理解TCP(Transmission Control Protocol)协议下的Socket编程。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,广泛应用于互联网上的各种服务,如HTTP、...

    socket通信成熟案例SanNiuSignal源码

    SanNiuSignal是一款基于Socket通信技术的成熟案例,主要用于实现客户端与服务器之间的实时、可靠的数据交互。在本文中,我们将深入探讨Socket通信的基本原理以及SanNiuSignal源码中的关键设计与实现细节。 Socket,...

    .net SOCket通信的小例子,超简单

    本示例提供了一个简单的.NET Socket通信方法,适用于初学者理解和实践。下面将详细介绍Socket通信的基本概念、原理以及如何在.NET环境中进行操作。 Socket,通常被称为套接字,是网络通信中的一个接口,它允许应用...

    Android与PC机 Socket 多线程通信经典案例,移动开发必备代码

    2. **Android中的Socket通信**:在Android应用中,可以使用`java.net.Socket`类创建客户端Socket,并连接到服务器的特定端口。同时,服务器端使用`java.net.ServerSocket`监听客户端的连接请求。 3. **多线程**:在...

    c# socket 异步通信 例子

    C#中的异步Socket通信主要依赖两个关键方法:`BeginConnect`和`EndConnect`用于建立连接,`BeginSend`和`EndSend`用于发送数据,以及`BeginReceive`和`EndReceive`用于接收数据。 1. **建立异步连接** 使用`...

    使用NIO实现非阻塞socket通信

    本项目利用NIO实现了一个简单的非阻塞socket通信的聊天工具,使得在高并发环境下,服务器能够同时处理多个客户端连接,提高系统性能。 1. **非阻塞I/O**: 在BIO模型中,读写操作是阻塞的,即当没有数据可读或无法...

    socket案例

    然而,需要注意的是,由于HTTP协议是无状态的,而Socket通信是基于连接的,所以通常在Web应用中,我们会用到HTTP长连接(如HTTP/1.1的Keep-Alive)或者WebSocket来保持持久连接,以便进行实时的前后台交互。...

    Java_socket 通信(源码+Java包)

    Java Socket通信是网络编程中的基础...通过这个案例,我们可以学习到如何在Java中实现基本的Socket通信,以及如何通过多线程处理并发连接。这对于构建聊天室、文件传输、在线游戏等需要实时通信的应用场景至关重要。

    Socket通信.7z

    总之,这个"Socket通信.7z"压缩包的内容可能是关于如何在WinForm应用中使用Socket进行网络通信的一个实践案例,它可以帮助开发者理解和掌握Socket通信的基本原理和实现方式,为构建网络应用提供基础。

    HPSocket通信框架

    《HPSocket通信框架:多语言支持与网络协议解析》 HPSocket通信框架是一款强大的网络通信库,专为开发者设计,以满足跨语言、跨平台的网络编程需求。其核心在于提供了一套高效、稳定且易用的接口,使得开发者能够...

    socket通信MFC版本

    Socket通信在IT行业中是网络编程的基础,特别是在C++和MFC(Microsoft Foundation Classes)环境中,它为开发者提供了构建网络...同时,这也是一个很好的学习案例,展示了如何在C++环境中利用MFC实现高效的socket通信。

    Flex和java的socket通信

    接下来,我们将通过一系列案例逐步深入理解Flex和Java的Socket通信过程。 ##### (一) 单向通信 在这个案例中,客户端向服务端发送消息,但不接收任何响应。 ##### (二) 多客户端通信 本案例将展示如何支持多个...

    仿QQ版socket通信.rar仿QQ版socket通信.rar

    在本案例中,"仿QQ版socket通信"是指利用Socket编程技术来模仿QQ即时通讯软件的功能,实现用户间的聊天、文件传输等功能。下面将详细讲解Socket通信的基本原理以及在实现仿QQ版通信中可能涉及的关键技术。 1. ...

    安卓app+java服务端+socket通信

    在实际的案例中,Android App可能会设置一个后台线程或者使用AsyncTask来处理Socket通信,以避免阻塞UI线程。同时,服务端通常也会开启多线程或者使用线程池来处理多个客户端的并发连接。 Socket通信的优点在于它的...

    基于Android的socket通信

    总结来说,这个资源提供了一个基础的Android与Socket通信的实践案例,涵盖了Android客户端和服务器端的实现。通过深入研究和调试这些代码,开发者可以更好地掌握Socket通信的核心原理,为今后的网络编程打下坚实的...

    Socket 异常通信实例

    在物联网环境中,数据安全至关重要,因此通常会采用SSL/TLS协议对Socket通信进行加密,以防止数据被窃取或篡改。C#中的System.Net.Security命名空间提供了相关类支持SSL/TLS,比如SslStream,可以用于建立安全的...

    移动智能终端开发--socket通信简介.pptx

    Socket通信的工作原理可以用生活中的案例来解释。例如,在日常生活中,我们打电话给一个朋友,首先拨号,电话另一端听到电话铃声后接通电话,这时我和朋友建立起了连接,就可以讲话了,等交流结束,挂断电话结束本次...

Global site tag (gtag.js) - Google Analytics