服务器端代码如下:
package com.ustc.socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ServerSocketTest{
private List<Socket> socketList=new ArrayList<Socket>();
public void init() throws IOException{
try {
ServerSocket server=new ServerSocket(8888);
while(true){
Socket socket=server.accept();
socketList.add(socket);
Thread recieve=new Thread(new ThreadServer(socket));
recieve.start();
//new Thread(new ThreadServer2(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("网络错误");
}
}
public static void main(String[] args) throws IOException {
new ServerSocketTest().init();
}
class ThreadServer implements Runnable{
private Socket socket;
public ThreadServer(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
String socAddr=socket.getInetAddress().toString();
String socPort=socket.getPort()+"";
BufferedReader in= new BufferedReader(new InputStreamReader(
socket.getInputStream(),"utf-8"));
//DataInputStream di=new DataInputStream(socket.getInputStream());
while(true){
String s=in.readLine();
//String s=di.readUTF();
//byte[] buf=new byte[1024];
//socket.getInputStream().read(buf);
//String s=new String(buf,"utf-8");
String send=socAddr+":"+socPort+" "+s;
System.out.println(socAddr+":"+socPort+" "+s);
for(Socket socket2:socketList){
if(socket2==socket){
continue;
}
PrintWriter out =new PrintWriter(new BufferedWriter(new
OutputStreamWriter(socket2.getOutputStream(),"utf-8")));
out.write(send+"\n");
out.flush();
// DataOutputStream dop=new DataOutputStream(socket2.getOutputStream());
// dop.writeUTF(send);
//socket2.getOutputStream().write(send.getBytes("utf-8"));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码如下:
package com.ustc.socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ClinetTest{
public void init() throws IOException {
try {
Socket socket = new Socket("192.168.200.216", 8888);
new Thread(new RecieverThread(socket)).start();
new Thread(new SendMessage(socket)).start();
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("链接错误");
} catch (IOException e) {
e.printStackTrace();
System.out.println("流错误");
} finally {
}
}
public static void main(String[] args) throws Exception {
new ClinetTest().init();
}
class RecieverThread implements Runnable{
private Socket socket;
public RecieverThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
while(true){
// DataInputStream di=new DataInputStream(socket.getInputStream());
// String s=di.readUTF();
BufferedReader in= new BufferedReader(new InputStreamReader(
socket.getInputStream(),"utf-8"));
String s=in.readLine();
// byte[] buf=new byte[1024];
// socket.getInputStream().read(buf);
// String s=new String(buf,"utf-8");
System.out.println(s);
// String test="这是测试数据";
// byte[] test2=test.getBytes("utf-8");
// System.out.println(new String(test2,"gbk"));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class SendMessage implements Runnable{
private Socket socket;
public SendMessage(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(),"utf-8")));
// DataOutputStream dop=new DataOutputStream(socket.getOutputStream());
Scanner sc=new Scanner(System.in);
while(true){
String s=sc.nextLine();
out.write(s+"\n");
out.flush();
// dop.writeUTF(s);
//socket.getOutputStream().write;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
能够实现点到点聊天功能
1.启动服务器端
2。启动两个客户端
3.可以在两个客户端之间收发消息
未解决问题:中文乱码问题,望大神指导!!!万分感谢!!!