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();
}
}
}
}
}