java socket服务器搭建_java中socket创建服务端与客户端即时对聊

该博客展示了如何在Java中使用Socket搭建服务器并实现客户端与服务器的即时对聊。通过创建ServerSocket监听特定端口,服务器端接收到客户端连接请求后发送欢迎信息,并在接收到客户端消息后进行回应,直到接收到特定退出命令关闭连接。
摘要由CSDN通过智能技术生成

package tool;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

/**

* 服务器

* @author Mr.Zhang

* 服务端与客户端建立连接的过程

*1.创建服务端对象,然后指定要监听的端口

*2.服务端监听向指定端口发出的请求

*3.客户端发送请求

*4.服务端接收到请求并建立连接

*5.服务端关闭连接

*/

public class ServerDemo {

/**

* @param args

* @throws IOException

*/

public static void main(String[] args) throws IOException {

serverSocket();//服务器开,注释client

//client();//客户端开,注释serverSocket

}

/**

* 服务器端

* @throws IOException

*/

public static void serverSocket() throws IOException{

System.out.println("服务器端就绪");

ServerSocket server=new ServerSocket(9999);

//服务端监听请求

while(true){

Socket socket=server.accept();

System.out.println("服务器获得连接");

/**

* 1.服务端发出欢迎信息

*/

//通过socket获得流

OutputStream os=socket.getOutputStream();

PrintWriter pw=new PrintWriter(os);

pw.println("服务器端发送:欢迎您!");

pw.flush();

/**

* 使用BufferedReader接收客户端信息

*/

InputStream is=socket.getInputStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

String msg=new String();

/**

* 什么是阻塞?

* 阻塞就是由于流中的数据没有满足获取的条件,输入流就会一直等待接收满足条件的数据,由此造成了程序等待,就是阻塞

* 解决方法:1. IO:让读取的数据满足读取条件   2.NIO

*/

while((msg=br.readLine())!=null){

if(msg.equalsIgnoreCase("quit")){//断开服务器端连接

socket.close();

break;

}

if(msg.equalsIgnoreCase("quitall")){//断开服务器端与客户端连接

socket.close();

server.close();

break;

}

System.out.println("客户端发出的数据是"+msg);

/**

* 服务端发出确认信息

*/

Scanner scan=new Scanner(System.in);

String sendMsg=scan.next();

pw.println(sendMsg);

pw.flush();

}

}

}

/**

* 客户端

* @throws IOException

* @throws UnknownHostException

*/

public static void client() throws UnknownHostException, IOException{

//使用Socket向指定的机器和端口发出请求

Socket socket=new Socket("192.168.1.101",9999);

/**

* 2.客户端接收服务端发出的欢迎您信息,并发送数据

*/

//通过socket获得输入流

InputStream is=socket.getInputStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

//持续接收服务器端信息

String content=new String();

while((content=br.readLine())!=null){

System.out.println("服务端发送的数据"+content);

Scanner scan=new Scanner(System.in);

String sendMsg=scan.next();

PrintWriter pw=new PrintWriter(socket.getOutputStream());

pw.println(sendMsg);

pw.flush();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值