使用java网络编程模拟两个人聊天,可以相互发消息,而且支持一次发多条消息,代码如下:
服务端:
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println("我是张三");
//启动发送消息线程
new SendThread(s).start();
//启动接受消息线程
new RecieveThread(s).start();
}
}
客户端:
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 8888);
System.out.println("我是李四");
// 启动发送消息线程
new SendThread(s).start();
// 启动接受消息线程
new RecieveThread(s).start();
}
}
发送消息线程
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class SendThread extends Thread{
private Socket socket;
public SendThread(Socket socket){
this.socket = socket;
}
public void run(){
try {
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
while(true){
Scanner sc = new Scanner(System.in);
String str = sc.next();
dos.writeUTF(str+"\t\t"+DateFormatUtils.dateToStr(new Date()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
接收消息线程
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class RecieveThread extends Thread {
private Socket scoket;
public RecieveThread(Socket scoket) {
this.scoket = scoket;
}
public void run() {
try {
InputStream is = scoket.getInputStream();
DataInputStream dis = new DataInputStream(is);
while (true) {
String msg = dis.readUTF();
if(scoket.getPort()==8888){
System.out.print("\t\t张三:");
}else{
System.out.print("\t\t李四:");
}
System.out.println(""+msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
工具(发送消息时间格式化)
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 时间格式化
*/
public class DateFormatUtils {
static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public static String dateToStr(Date date){
return format.format(date);
}
}
然后就可以测试了,,先启动服务端Server,然后再启动Client,接下来就可以在它们俩个控制台进行聊天了,效果如图:
哈哈,很好玩吧!!!