socket编程基本用法

客户端服务端模型图

在这里插入图片描述

实现服务端和客户端消息发送与接受

服务端
package com.qianfeng.xqc.day0317.socketwhile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 1. 新建一个服务端对象
 * 2. 等待客户端连接; 开始监听
 * 3. 向客户端发送消息
 * 	3.1 将字节流包装成字符流进行发送信息
 * 4. 接受客户端发给我的消息
 * 	4.1将字节流转成字符进行信息读取 * 
 * service.getInetAddress().getHostAddress():获取远程计算机的IP地址
 *
 */
public class DemoServiceWhile {
	public static void main(String[] args) {
		try {
			//新建一个服务端对象
			ServerSocket serverSocket = new ServerSocket(8888);
			System.out.println("服务端启动...等待客户端连接...");	
			
			Socket service;
			
			while(true) {
				//等待客户端连接; 开始监听
				service = serverSocket.accept();
				
				//向客户端发送消息
				OutputStream os = service.getOutputStream();
				
				//将字符流包装成字节流进行操作
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
				//发送信息,加上 \n[为了读取方便]
				String msg = "你好客户端,我是服务端,你的ip:" + service.getInetAddress().getHostAddress() + "\n";
				bw.write(msg);
				bw.flush();//刷新输出流,不然对方接受不了 ;这里不能close
				
				//接受客户端发给我的消息
				InputStream is = service.getInputStream();
							
				//将字节流转成字符流操作
				BufferedReader br = new BufferedReader(new InputStreamReader(is));			
				//信息读取
				String read = br.readLine();
				System.out.println("客户端的消息:" + read);
//				br.close();		
			}				
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

客户端
package com.qianfeng.xqc.day0317.socketwhile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
 * 1. 新建一个socket对象
 * 2. 根据ip和端口接受服务端发过来的消息
 * 	2.1 转成字符流进行信息读取
 * 3. 向服务端发送消息
 */
public class DemoClientKeyInput {
	public static void main(String[] args) {
		String ip = "127.0.0.1";//服务端ip
		int port = 8888;//端口
		try {
			//新建一个socket对象
			Socket client = new Socket(ip, port);
			
			//根据ip和端口接受服务端发过来的消息
			InputStream is = client.getInputStream();
			
			//转成字符流进行信息读取
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String smsg = br.readLine();
			System.out.println("服务器的消息:" + smsg);
			
			
			//输入给服务端的信息
			String ss = shuru();
			
			//向服务端发送消息
			OutputStream os = client.getOutputStream();
			String cmsg = ss + "你好服务端,我是客户端 \n";
			os.write(cmsg.getBytes());
			os.flush();
			
			
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
		
	public static String shuru() throws IOException {
		//往服务端输入信息
		InputStreamReader rd = new InputStreamReader(System.in);
		BufferedReader sbr = new BufferedReader(rd);
		System.out.println("请输入:");
		String ss = sbr.readLine();
		return ss;
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值