Java端口通信

Java实现端口通信

  • 根据个人需求不同,可以修改代码,由于readLine以及nextLine都是阻塞式函数,若无消息则程序等待消息输入,故只能实现一问一答通信或者自动回答模式
  • 个人简单实现端口通信,具体代码如下(仅供学习使用,有待改善)
    注释详细,共初学使用,欢迎在评论中提出问题。

//需要导入的包
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class _socket{
	public static void main(String[] args) {
		try {
			//Socket套接字,定义一个套接字用于通信,相当于一个窗口
			Socket socket= new Socket("127.0.0.1",4001); 
			//参数一:ip地址,“127.0.0.1”为本机地址
			//参数二:端口号,1-1024已预留,范围0~65535
			
			// 获取端口输出流,由端口向外发送信息
			OutputStream os = socket.getOutputStream();// 字节输出流
			PrintWriter pw = new PrintWriter(os);// 将输出流包装成打印流
			// 获取端口输入流,并读取端口收到的信息
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			Scanner sc = null;
			//定义字符串info用于存储收到的信息
			String info = null;
			while (true) {
				//指定从键盘读取信息
				sc = new Scanner(System.in);
				//定义字符串存储要发送的信息
				String command = sc.nextLine();
				//nextLine()按行读取键盘输入流中信息,遇到换行符结束,不存储换行符
				
				//发送信息时带上换行符,不然readLine函数读取信息时会卡死
				pw.write(command+"\r\n");
				pw.flush();
				//收到的信息用readLine函数读取存储在info
				info = br.readLine();
				//readLine()按行读取收到的信息,遇到换行符结束,不存储换行符				
				//将发出与收入的信息打印
				System.out.println("发-->" + command + "\r\n");
				System.out.println("收-->" + info + "\r\n");
				}
				//发送exit则退出通信
				if (command.equalsIgnoreCase("exit"))
					break;
			}
			//关闭各种流
			socket.shutdownOutput();
			sc.close();
			socket.close();
			pw.close();
			os.close();
			is.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值