刚刚参加工作不久、算是一个菜鸟吧、、下面是自己写的一个基于socket的聊天程序、多多提意见和建议、、
client、单词拼错了、大家不就用提醒了、
server、服务器端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class Server {
public static Map map=new HashMap();
public static Integer msgCount=0;
public void doService() throws Exception {
ServerSocket ss = new ServerSocket(8088);
System.out.println("服务器已经启动.....");
while (true) {
Socket socket = ss.accept();
System.out.println("一个客户端连接了...");
try {
new ReadThead(socket).start();
new WriteThead(socket).start();
} catch (Exception e) {
// TODO: handle exception
}
}
}
public static void main(String[] args) throws Exception {
new Server().doService();
}
}
class ReadThead extends Thread {
private Socket socket;
public ReadThead(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
BufferedReader br = null;
String ipString = null;
try {
synchronized (socket) {
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
ipString = socket.getLocalAddress().getHostAddress();
}
while (true) {
String msg = "";
if ((msg = br.readLine()) != null) {
msg = ipString + "说:" + msg;
System.out.println(msg);
synchronized (Server.map) {
Server.map.put(Server.msgCount++, msg);
}
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
class WriteThead extends Thread {
private Integer msgCount=0;
private Socket socket;
public WriteThead(Socket socket) {
this.socket = socket;
}
public void run() {
PrintWriter pw = null;
OutputStream outputStream = null;
try {
synchronized (socket) {
outputStream = socket.getOutputStream();
pw = new PrintWriter(outputStream);
}
String msg = null;
while (true) {
synchronized (Server.map) {
if (msgCount < Server.map.size()) {
msg = Server.map.get(msgCount).toString();
pw.println(msg);
pw.flush();
outputStream.flush();
msgCount++;
}
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
client
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Clinet {
public static void main(String [] args)throws Exception{
Socket socket=new Socket("192.168.0.125",8088);
new ReadThread(socket).start();
new WriteThread(socket).start();
System.out.println("客户端已经启动");
}
}
class ReadThread extends Thread{
private Socket socket;
public ReadThread(Socket socket){
this.socket= socket;
}
public void run(){
BufferedReader br = null;
String ipString=null;
try {
synchronized (socket) {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ipString=socket.getLocalAddress().getHostAddress();
}
while(true){
String msg="";
if((msg=br.readLine())!=null){
System.out.println(msg);
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
class WriteThread extends Thread{
private Socket socket;
public WriteThread(Socket socket){
this.socket= socket;
}
public void run(){
PrintWriter pw=null;
OutputStream outputStream=null;
try {
synchronized (socket) {
outputStream=socket.getOutputStream();
pw =new PrintWriter(outputStream);
}
String msg=null;
while(true){
Scanner scanner=new Scanner(System.in);
msg=scanner.next();
pw.println(msg);
pw.flush();
outputStream.flush();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}