Java_socket-控制台下的socket聊天

服务端:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//服务端先启动
public class serverTest {
	public static void main(String[] args) {
		System.out.println("我是服务器------------------");
		InputStream read=null;//读消息
		OutputStream write=null;//发消息
		Scanner input=new Scanner(System.in);
		ServerSocket servet=null;//服务器套接字(等用户连接)
		Socket socket=null;//套接字(由客户端发起,唯一和客户端的管道,用于读写信息)
		try {
			servet=new ServerSocket(9999);//创建服务器套接字,传递端口号(尽量写大)
			System.out.println("服务器启动成功");
			socket=servet.accept();//等待客户端连接(如果客户端没有连接,程序会卡死)
			System.out.println("客户端连接成功:"+socket.getRemoteSocketAddress());//通过管道获取客户端的信息
			
			read=socket.getInputStream();//获取管道读消息对象
			write=socket.getOutputStream();//获取管道写对象
			
			while(true){
				//先接受客户端发来的消息
				byte[] btsfa=new byte[1024];//每次长度发短
				int len=0;
				len=read.read(btsfa);//读取到bts中(程序卡死,等待客户端发来消息)
				String str=new String(btsfa,0,len);//客户端发来的文字
				System.out.println("客户端发来--》"+str);
				if(str.equals("88")){//客户端发来88退出循环
					break;
				}
	
				//给客户端发消息
				byte[] btsjie=new byte[1024];//每次长度发短
				System.out.println("请输入要发送的消息");
				str=input.nextLine();//控制输入一句话
				btsjie=str.getBytes("utf-8");
				write.write(btsjie);//给客户端发送消息
				if(str.equals("88")){
					break;
				}	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(write!=null) write.close();
				if(read!=null)read.close();
				if(socket!=null) socket.close();
				if(servet!=null)servet.close();
				
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

}

客户端:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class clientTest {
	public static void main(String[] args) {
		System.out.println("我是客户端-----------------------");
		Socket socket = null;// 套接字
		InputStream read = null;// 读取消息
		OutputStream write = null;// 写消息
		Scanner input = new Scanner(System.in);
		try {
			socket=new Socket("127.0.0.1",9999);//客户端主动发起连接,通过IP和端口创建套接字对象
			System.out.println("连接服务器成功");
			read=socket.getInputStream();//读流
			write=socket.getOutputStream();//写流
			
			while(true){
				//先发送消息
				byte btsfa[]=new byte[1024];
				int len=0;
				System.out.println("请输入要发送的消息");
				String str=input.nextLine();//控制台输入一行
				btsfa=str.getBytes("utf-8");//设置编码格式
				write.write(btsfa);//往服务器写数据
				if(str.equals("88")){
					break;
				}
				
				
				//后接受消息
				byte btsjie[]=new byte[1024];
				len=read.read(btsjie);
				str=new String(btsjie,0,len);
				System.out.println("服务器传来--》"+str);
				if(str.equals("88")){
					break;
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (write != null)
					write.close();
				if (read != null)
					read.close();
				if (socket != null)
					socket.close();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}

先启动服务端
在这里插入图片描述
在启动客户端
在这里插入图片描述

客户端输入要发的消息 回车
在这里插入图片描述
看服务端:
在这里插入图片描述
服务端输入消息
在这里插入图片描述
看客户端:
在这里插入图片描述
任意一方,输入88 都会是双方退出(停止程序)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值