Use of socket in Java network programming (simple server client implementation)

For the detailed introduction of socket, please click
the detailed introduction of socket, link 2

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server extends Thread {
	//创建一个ServerSocket,用于监听客户端Socket连接请求
	ServerSocket server = null;
	Socket socket = null;
	public Server(int port) {
		try {
			server = new ServerSocket(port);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void run() {
		super.run();
		
		try {
			System.out.println("wait client connect...");
			//侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞
			socket = server.accept();
			
			new sendMessThread().start();
			
			System.out.println(socket.getInetAddress().getHostAddress()+"SUCCESS TO CONNECT...");
			InputStream in = socket.getInputStream();
			int len = 0;
			byte[] buf = new byte[1024];
			while ((len = in.read(buf)) != -1) {
				System.out.println("client saying: " + new String(buf, 0, len));
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
	class sendMessThread extends Thread {
		public void run() {
			super.run();
			Scanner scanner = null;
			OutputStream out = null;
			try {
				if (socket != null) {
					scanner = new Scanner(System.in);
					out = socket.getOutputStream();
					String in = "";
					do {
						in = scanner.next();
						out.write(("server saying: " + in).getBytes());
						out.flush();
					}while (!in.equals("q"));
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		Server server = new Server(1234);
		server.start();
	}
}

package Test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client extends Thread {

    //定义一个Socket对象
    Socket socket = null;

    public Client(String host, int port) {
        try {
            //需要服务器的IP地址和端口号,才能获得正确的Socket对象
            socket = new Socket(host, port);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void run() {
        //客户端一连接就可以写数据个服务器了
        new sendMessThread().start();
        super.run();
        try {
            // 读Sock里面的数据
            InputStream s = socket.getInputStream();
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = s.read(buf)) != -1) {
                System.out.println(new String(buf, 0, len));
            }

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

    //往Socket里面写数据,需要新开一个线程
    class sendMessThread extends Thread{
        public void run() {
            super.run();
            //写操作
            Scanner scanner = null;
            OutputStream os = null;
            try {
                scanner = new Scanner(System.in);
                os = socket.getOutputStream();
                String in = "";
                do {
                    in = scanner.next();
                    os.write(("" + in).getBytes());
                    os.flush();
                } while (!in.equals("bye"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            scanner.close();
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
        //需要服务器的正确的IP地址和端口号
        Client clientTest = new Client("127.0.0.1", 1234);
        clientTest.start();
    }
}
简化版服务端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException {
            ServerSocket server = new ServerSocket(9050);
            System.out.println("waiting...");
          //等待client的请求
            Socket socket = server.accept();
            while (true) {
                
                // 接收客户端的数据
                DataInputStream in = new DataInputStream(socket.getInputStream());
                String string = in.readUTF();
                System.out.println("client:" + string);
                // 发送给客户端数据
                DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                out.writeUTF("hi,i am hserver!i say:" + string);
                
            }
    }
}
客户端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) throws UnknownHostException, IOException {
    	Socket socket = new Socket("localhost", 9050);
        while (true) {
            try {
            	
                System.out.println("please input...");
                Scanner scanner = new Scanner(System.in);
                String p = scanner.nextLine();
                // 发送给服务器的数据
                DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                out.writeUTF(p);
                // 接收服务器的返回数据
                DataInputStream in = new DataInputStream(socket.getInputStream());
                System.out.println("server:" + in.readUTF());
                
            } catch (Exception e) {
            	socket.close();
                e.printStackTrace();
            }
        }
    }
}

Guess you like

Origin blog.csdn.net/ZWHSOUL/article/details/82911574