王铁柱14

导航

 

  Socket(套接字)是一种独立于具体协议的网络编程接口,在OSI模型中位于会话层和传输层之间。根据其使用方式可将套接字分为主动套接字和被动套接字,被动套接字指的是等待传入连接的套接字(如,服务器套接字),主动套接字指的是发起连接的套接字(如,客户端套接字)。以下是一个基于Java的Socket类编写的hello/hi网络程序。

Client端代码:

import java.net.*;
import java.io.*;

public class ChatClient {
    
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("127.0.0.1",2333);
        BufferedReader in = 
                new BufferedReader(
                    new InputStreamReader(
                        socket.getInputStream())); 
        PrintWriter out =
            new PrintWriter(
                new BufferedWriter(
                        new OutputStreamWriter(
                                socket.getOutputStream())),true);
        out.println("hello");
        System.out.println("client: hello");
        String str = in.readLine();
        System.out.println("server: "+str);
        socket.close();
    }
    
}

Server端代码:

import java.net.*;
import java.io.*;

public class ChatServer {
    
    public static void main(String[] args) throws IOException{
        ServerSocket s = new ServerSocket(2333);
        Socket socket = s.accept();
        BufferedReader in = 
            new BufferedReader(
                new InputStreamReader(
                    socket.getInputStream()));
        PrintWriter out = 
            new PrintWriter(
                new BufferedWriter(
                    new OutputStreamWriter(
                        socket.getOutputStream())),true);
        while(true) {
            String str = in.readLine();
            if(str.equals("hello")) {
                out.println("hi");
                break;
            }
        }
        socket.close();
        s.close();
    }
    
}

  Client端实例化一个Socket对象,由于该程序是在本地进行测试,故设定ip地址为127.0.0.1,并选取一个未被占用的port,此处选择2333。然后通过PrintWriter向Socket的OutputStream中写入"hello"传输给Server端,通过Socket的getInputStream()方法,接收Server端发来的信息。Server端先注册一个ServerSocket,并设定port为2333,然后创建1个Socket,使用其accept()方法与Client端建立连接,通过Socket的getInputStream()方法,接收Client端发来的信息,若收到信息,且信息内容为"hello",通过PrintWriter向Socket的OutputStream中写入"hi"传输给Client端。Client端同样通过Socket的getInputStream()方法,接收到Server端发来的"hi"。最终打印结果如下:

  client: hello
  server: hi

  以上便是Java网络编程中Socket类的简单用法,若要实现并发,则需要使用Thread。

 

参考文献:

1. Bruce Eckel, Thinking in Java (4th Edition).

posted on 2019-12-10 11:00  王铁柱14  阅读(208)  评论(0编辑  收藏  举报