首页 > 技术文章 > socket的简单例子

liangxiaojin 2020-03-20 10:33 原文

socket的简单例子:

场景:在本地模拟客户端和服务端通过socket,进行简单的连接,客户端发送请求到服务端,而服务端也可以接受请求后,返回信息给客户端。

解析:

1:客户端通过socket,向某一服务端(ip),的应用(端口号),进行连接。

2:服务端会对该应用进行监听,并处于一个阻塞的状态,等待着请求的访问。

3:若两者接通后就可以通过流的方式进行数据信息的交互。

代码:新建两个简单的测试的类(分别代表客户端和服务端)

package com.lj;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class SimpleClient {
    public static void main(String[] args) {

        try {
            //连接某个机器的服务端的应用
            Socket socket = new Socket("127.0.0.1",8888);

            //接通客户端后,就可以与之进行交流,java.io
            //发送消息到服务端 对自身而言是输出
            DataOutputStream output = new DataOutputStream(socket.getOutputStream());
            output.writeUTF("[来自client的消息]:hello 你好");

            System.out.println("客户端发送完毕!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {

    public static void main(String[] args) {

        try {
            //服务端需要监听一个应用
            ServerSocket serverSocket = new ServerSocket(8888);

            //监听的应用处于阻塞的状态
            Socket socket = serverSocket.accept();

            System.out.println("连接正常!");

            //接通客户端后,就可以与之进行交流,java.io
            //发送消息到服务端 对自身而言是输入
            DataInputStream input = new DataInputStream(socket.getInputStream());
            String context = input.readUTF();
            System.out.println(context);
            System.out.println("服务端就收完毕!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

测试:

先执行服务端,对端口为8888的应用进行监听,控制台不会输出,因为正处于阻塞的状态等待着请求访问接通。

再执行客户端,向服务端进行请求,这是若是能正常连接,则可以,正常跑连接后的逻辑,交互也可以使用文件流的所有技术。

 

推荐阅读