创建Java 程序 服务器 和用户,用以聊天,多用户链接一个服务器,共同聊天

package Mo;

 

//import java.io.BufferedReader;

import java.io.IOException;

//import java.io.InputStream;

//import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

 

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

 

//import sun.java2d.pipe.BufferedBufImgOps;

 

public class Client {

 

private Socket socket;

public Client(){

try {

System.out.println("正在连接服务器....");

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

System.out.println("与服务器建立连接");

/*OutputStream out=socket.getOutputStream();//localhost

OutputStreamWriter osw=new OutputStreamWriter(out,"UTF-8");

PrintWriter pw = new PrintWriter(osw);

pw.println("你好,服务器!");

pw.flush();*/

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//程序的启动方法

public void start() {

Scanner scan=new Scanner(System.in);

try {

OutputStream out=socket.getOutputStream();

OutputStreamWriter osw=new OutputStreamWriter(out,"UTF-8");

PrintWriter pw=new PrintWriter(osw,true);//自动行刷新

ServerHandler s = new ServerHandler();

Thread t = new Thread(s);

t.start();

System.out.println("开始聊天");

while(true){

String line=scan.nextLine();

pw.println(line);

pw.flush();

//一个字符串不足以填满缓冲区

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args) {

Client c = new Client();

c.start();

 

}

class ServerHandler implements Runnable{

public void run(){

try{

    InputStream in=socket.getInputStream();

    InputStreamReader isr = new InputStreamReader(in,"UTF-8");

BufferedReader br = new BufferedReader(isr);

String message=null;

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

System.out.println(message);

}

}catch(Exception e){

e.printStackTrace();

}

}

}

 

}

 

 

 

 

 

 

 

 

package Mo;

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

 

public class Server {

private List<PrintWriter> allout;

private ServerSocket server;

//private Socket socket;

//private String host;

public Server(){

try {

System.out.println("正在申请端口号...");

server = new ServerSocket(6666);//本机ip:192.168.126.34

System.out.println("端口号申请完毕");

allout = new ArrayList<PrintWriter>();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void start()

{

try {

while(true)

{

System.out.println("等待客户端链接...");

Socket socket=server.accept();

System.out.println("一个用户已链接");

ClientHandler c=new ClientHandler(socket);

Thread t=new Thread(c);

t.start();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args) {

Server server=new Server();

server.start();

}

class ClientHandler implements Runnable{

private Socket socket;

String host;

public ClientHandler(Socket socket){

this.socket = socket;

//获得socket下的地址信息

InetAddress inet = socket.getInetAddress();

host = inet.getHostAddress();

}

 

public void run() {

try {

//System.out.println(host+"上线了!");

InputStream in = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(in,"UTF-8");

BufferedReader br = new BufferedReader(isr);

System.out.println(host+"上线了!");

OutputStream out = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-8");

PrintWriter pw = new PrintWriter(osw);

/*

 *  将输出数据添加到集合

 */

synchronized (allout) {//同步锁

allout.add(pw);

}

String message =null;

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

//String message= br.readLine();

System.out.println("客户端说:"+message);

/*for(PrintWriter o:allout){

o.println(message);

}*/

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();//记录日志

}finally {

System.out.println(host+"下线了!");

if(socket!=null) {

try {

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

 

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值