javaSE socket群聊基础无swing技术事例

这是一个初学JavaSE的初学者 运用Java基础技术socket做的一个聊天室


服务器端;

package zxlt2;



import java.io.*;
import java.net.*;


public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8090);
while (true) {


Socket socket = server.accept();// 监听状态
System.out.println("服务器启动,准备接收数据");

new ServerThread(socket).start();

}


}


}

服务器端启动线程

package zxlt2;


import java.io.*;
import java.net.Socket;
import java.util.*;


public class ServerThread extends Thread {
private Socket socket;
public static Map<Socket, String> map = new HashMap<Socket, String>();// 设置一个静态变量保存socket到List集合中


public ServerThread(Socket socket) {
super();
this.socket = socket;
}


@Override
public void run() {


try {
while (true) {
InputStream is = socket.getInputStream();// 打开输入流
byte[] b = new byte[1024];// 创建数组

if (!map.containsKey(socket)) {
is.read(b);
String name = new String(b);
map.put(socket, name);

} else {
is.read(b);
Set<Socket> set = map.keySet();
for (Socket socket1 : set) {
String str = map.get(socket1);
if (!str.equals(map.get(socket))) {
OutputStream os = socket1.getOutputStream();
os.write(b);
} else {
String s = "----ok----";
OutputStream os1 = socket1.getOutputStream();
os1.write(s.getBytes());
}
}
}
}

} catch (

IOException e) {
System.err.println("客户端有人下线");
}
}
}
客户端

package zxlt2;


import java.io.*;
import java.net.*;
import java.util.Scanner;


public class Client {


public static void main(String[] args) throws UnknownHostException, IOException {


Socket socket = new Socket("192.168.4.169", 8090); // 创建客户端sockte
Scanner sc = new Scanner(System.in);
System.out.println("请输入名字:");
String name = sc.nextLine();
new ClientThread(socket, name).start();


new ClientThread2(socket, name).start();


// is.close();// 结束输入流
// os.close();// 结束输出流
}
}

客户端输出流线程

package zxlt2;


import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;


public class ClientThread extends Thread {


private Socket socket;
private String name;


public ClientThread(Socket socket, String name) {
super();
this.socket = socket;
this.name = name;
}


@Override
public void run() {
Scanner s = new Scanner(System.in);// 控制台输入并扫描控制台


try {
OutputStream os = socket.getOutputStream();//打开输出流传输数据
os.write((name+"上线了").getBytes());//发送上线信息给服务器告知所有人此客户端已经上线已经上线;
while (true) {
String ss = s.nextLine();
if (ss.contains("bye")) {//判断是否输入“bye”字符出现则跳出线程关闭客户端
System.exit(0);
}
Date date=new Date();
SimpleDateFormat simple=new SimpleDateFormat("yyyy-MM-dd_hh-mm-ss-SS_");
os.write(("-----"+name +":-----"+"\n"+simple.format(date)+"\n"+ ss).getBytes());

}


} catch (IOException e) {
e.printStackTrace();
}
}
}

客户端输入流线程

package zxlt2;


import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;


public class ClientThread2 extends Thread {
private Socket socket;
private String name;


public ClientThread2(Socket socket, String name) {
super();
this.socket = socket;
this.name = name;
}


@Override
public void run() {


try {
while (true) {
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
is.read(b);
String ss1 = new String(b);
System.out.println(ss1.trim());
}


} catch (IOException e) {


e.printStackTrace();
}


}


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值