您的位置:首页 > 编程语言 > Java开发

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

2014-11-06 23:40 357 查看
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 即时对聊