Java 利用socket,简单的server/client回显程序

Java的socket好像是基于tcp的,一些底层的东西,现在只是记录如何使用一些顶层的API来完成简单应用,底层原理,协议,以后再说。。。。

服务端

socket像一种通道,或者【串口】的概念,需要打开一个ServerSocket对象,作为接收侦听的【服务端】,然后ServerSocket需要打开侦听,也就是accept,这个举动会像一个while语句一样一直进行,直到有客户端连接,那么它会返回一个socket对象

基于socket对象,建立它的流控制器,就可以收发了

客户端
同样建立socket,不过是依照IP和端口号进行,并返回与server连接的socket,连接之后同样创建对应的流控制器,就可以收发了

代码

服务端:

package socket;
import java.io.*;
import java.net.*;

public class Server
{
	public static void main(String[] args) throws Exception 
	{
		// 建立socket侦听
		int port = 54321;
		ServerSocket server = new ServerSocket(port);
		Socket socket = server.accept();
		
		// 建立流读取器
		InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
		BufferedReader reader = new BufferedReader(isReader);
		PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
		
		while(true)
		{
			// 读取流并回显
			String line = reader.readLine();
			if(line.equals("endl")) 
			{
				writer.println("Server socket colsed !");
				break;
			}
			writer.println(line);
		}
	}
}

客户端:

package socket;
import java.io.*;
import java.net.*;
import java.util.*;

public class Client
{
	public static void main(String[] args) throws Exception
	{
		// 建立socket连接
	    String host = "127.0.0.1"; 
	    int port = 54321;
	    Socket socket = new Socket(host, port);
	    
	    // 建立流读取器
	    InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
		BufferedReader reader = new BufferedReader(isReader);
		PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
		
		Scanner scanner = new Scanner(System.in);
		while(true)
		{
			// 读取输入流并发送
			String send = scanner.nextLine();			
			writer.println(send);
			// 读取接收流并打印
			String echo = reader.readLine();
			System.out.println("Server echo: " + echo);
			if(send.equals("endl")) break;
		}
		
		System.out.println("Client socket colsed !");
	}
}

注意

需要在客户端的窗口输入,如果输入到了服务器端的窗口,那么不会有反应,在右下角点开对应的图标,会显示控制台是那个

在这里插入图片描述
回显功能:
在这里插入图片描述

发布了238 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44176696/article/details/104910711