基础Socket通信

本文介绍了一个简单的Java Socket通信实例,包括服务端与客户端的搭建。通过三个类:Server、Client及MessageHandleRunnable实现双向信息收发。Server类监听指定端口,接受连接请求;Client类主动发起连接;MessageHandleRunnable类负责消息的发送与接收。

    本文使用三个类完成客户端与服务端的 Socket 通信。

    Client:客户端,可完成信息收发

    Server:服务端,监听客户端请求,为了方便,也可以收发信息

    MessageHandleRunnable:实际收发信息的 Runnable 类

    

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

public class Server {
	public static void main(String[] args) {
		try {
			@SuppressWarnings("resource")
			ServerSocket server = new ServerSocket(1325);
			System.out.println("========Server is standing by========");
			
			while (true) {
				Socket socket = server.accept();
				MessageHandleRunnable runnable = new MessageHandleRunnable(socket);
				new Thread(runnable).start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

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

public class Client {
	public static void main(String[] args) {
			System.out.println("========Client started========");
			try {
				Socket socket = new Socket("localhost", 1325);

				Runnable client = new MessageHandleRunnable(socket);
				new Thread(client).start();
			} catch (UnknownHostException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
	}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class MessageHandleRunnable implements Runnable {
	public MessageHandleRunnable(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		// 读取线程
		Runnable readRunnable = new Runnable() {
			@Override
			public void run() {
				try {
					inStream = socket.getInputStream();
					Scanner in = new Scanner(inStream);

					// 读取消息
					while (in.hasNextLine()) {
						System.out.println(in.nextLine());
					}

					 in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		};
		Thread read = new Thread(readRunnable);
		read.start();

		// 发送线程
		Runnable writeRunnable = new Runnable() {
			@Override
			public void run() {
				try {
					outStream = socket.getOutputStream();
					pWriter = new PrintWriter(outStream, true);

					// 发送消息
					while (true) {
						String msg = inRead.nextLine();
						pWriter.println(msg);
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		};
		Thread write = new Thread(writeRunnable);
		write.start();
	}

	private Scanner inRead = new Scanner(System.in);
	private Socket socket = null;
	private InputStream inStream = null;
	private OutputStream outStream = null;
	private PrintWriter pWriter = null;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值