简单的socket编程+多线程;更多东西访问俺的博客啦啦啦,顺便求offer
http://blog.youkuaiyun.com/leejuen/
1.[代码]服务端
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Scanner;
public class ServerIM{
public static HashMap clientMap = new HashMap();
public static void main(String[] args) throws Exception
{
ServerSocket server = new ServerSocket(8888);
Socket client = null;
while(true)
{
System.out.println("等待客户端连接");
client = server.accept();
clientMap.put(client.getInetAddress().getHostAddress(), client);
new Thread(new ServerThread(client)).start();
}
}
}
class ServerThread implements Runnable
{
private Socket client = null;
private Socket client2 = null;
private String address2 = null;
public ServerThread(Socket client)
{
this.client = client;
}
public void run(){
// TODO Auto-generated method stub
try {
Scanner in = new Scanner(client.getInputStream());
PrintStream out = new PrintStream(client.getOutputStream());
System.out.println("客户端"+client.getInetAddress().getHostAddress()+"已经连接");
out.println("欢迎你是第"+ServerIM.clientMap.size()+"用户");
out.flush();
address2 = in.nextLine();
client2 = ServerIM.clientMap.get(address2);
if(client2==null)
{
out.println("你的小伙伴还没有上线请耐心等待");
while(client2 == null)
{
address2 = in.nextLine();
client2 = ServerIM.clientMap.get(address2);
}
}
out.println("您已成功和你的小伙伴连上线了你们可以开始通话了");
PrintStream out2 = new PrintStream(client2.getOutputStream());
while(true)
{
String call = in.nextLine();
System.out.println(client.getInetAddress().getHostAddress()+":"+call);
if("exit".equals(call)) break;
out2.println(client.getInetAddress().getHostAddress()+":"+call);
}
out2.println("再见");
System.out.println("客户端"+client.getInetAddress().getHostAddress()+"已经断开");
client.close();
client2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.[代码]客户端
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientIM {
public static void main(String[] args) throws Exception
{
//输入服务端主机ip地址
Socket client = new Socket("10.68.210.4",8888);
//发送数据给服务端流
PrintStream toServer = new PrintStream(client.getOutputStream());
PrintStream sout = new PrintStream(System.out);
//获取服务端数据流
Scanner getServer = new Scanner(client.getInputStream());
//控制台输入流
Scanner sin = new Scanner(System.in);
System.out.println("请输入你要通信的小伙伴的ip地址:");
/* 下面两句话目的是实现输入和刷新实时的作用,使得控制台输入不会阻塞*/
new Thread(new ClientScanner(sin, toServer)).start();
new Thread(new ClientScanner(getServer, sout)).start();
}
}
class ClientScanner implements Runnable
{
Scanner in;
PrintStream toServer;
public ClientScanner(Scanner in,PrintStream toServer)
{
this.in = in;
this.toServer = toServer;
}
public void run() {
// TODO Auto-generated method stub
while(in.hasNext())
{
toServer.println(in.nextLine());
}
}
}