欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Socket TCP 协议实现服务端和客户端的简单通信

程序员文章站 2022-06-06 14:05:05
...

前言

服务器端启动后,等待客户端的调用,客户端输出信息到流,服务端接受并打印,之后服务端输出信息到流,客户端接受并打印。


代码

服务端代码

package com.bestcxx.mavenstu.mavenssh.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 基于 TCP 协议的
 * 服务器端的Socket
 * @author WuJieJecket
 *
 */
public class ServerSocketAction {
	
	public static void main(String[] args) {
		try {
			//创建服务器端的 Socket
			@SuppressWarnings("resource")
			ServerSocket serverSocket=new ServerSocket(10000);//0-65535,其中0-1023 是知名端口
			
			//开始监听服务器端的 Socket,一旦客户端调用 socket 就被实例化
			Socket socket=serverSocket.accept();
			
			//获取客户端输入流
			InputStream inputStream=socket.getInputStream();
			byte b[]=new byte[1024];
			StringBuffer sbf=new StringBuffer();
			for(int n;(n=inputStream.read(b))!=-1;){
				sbf.append(new String(b,0,n));				
			}
			System.out.println("客户端传递进来的信息为:"+sbf.toString());
			socket.shutdownInput();
			
			//向客户端反馈信息
			OutputStream outputStream=socket.getOutputStream();
			PrintWriter printWriter=new PrintWriter(outputStream);
			printWriter.write("我是服务端");
			printWriter.flush();
			socket.shutdownOutput();
			
			//关闭资源
			
			inputStream.close();
			printWriter.close();
			outputStream.close();
			
			socket.close();
			serverSocket.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}



客户端代码

package com.bestcxx.mavenstu.mavenssh.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 客户端Socket
 * @author WuJieJecket
 *
 */
public class ClientSocketAction {

	public static void main(String[] args) {
		try {
			Socket socket=new Socket("127.0.0.1",10000 );
			OutputStream outputStream=socket.getOutputStream();
			PrintWriter printWriter=new PrintWriter(outputStream);
			printWriter.write("你好,我是客户端");
			printWriter.flush();
			socket.shutdownOutput();
			
			//获取服务器端返回的信息
			//获取服务端输入流
			InputStream inputStream=socket.getInputStream();
			byte b[]=new byte[1024];
			StringBuffer sbf=new StringBuffer();
			for(int n;(n=inputStream.read(b))!=-1;){
				sbf.append(new String(b,0,n));				
			}
			System.out.println("服务器端反馈进来的信息为:"+sbf.toString());
			socket.shutdownInput();
			
			//关闭资源
			printWriter.close();
			outputStream.close();
			
			inputStream.close();
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


运行


先运行  ServerSocketAction.java 的main 方法

再运行 ClientSocketAction.java 的main 方法


结果

ServerSocketAction控制台显示:

客户端传递进来的信息为:你好,我是客户端


ClientSocketAction 控制台显示:

服务器端反馈进来的信息为:我是服务端



相关标签: Socket TCP