这篇文章是对我的前一篇文章的补充加入线程
首先是服务器端:
public class ChatServer extends Thread{//继承线程
//声明属性和方法
private ServerSocket ss=null;
private ServerThread st=null;
//构造函数,与主类同名
public ChatServer(int port){
try {
//开始绑定端口
ss=new ServerSocket(port);
} catch (IOException e) {
System.out.println("绑定端口失败");
}
System.out.println("绑定端口成功");
start();//记住启动了
}
//服务器发送消息的方法
public void sendmsg(String msg){
if(st!=null){//如果线程不为空,就说明要开始发送消息了
st.sendMsg(msg);
}
}
//等待客户端连接线程 的方法
@Override
public void run() {
try {
System.out.println("线程已经启动等待客户端连接");
//创建一个客户端Socket插头
Socket socket=ss.accept();
st=new ServerThread(socket);
st.start();
} catch (IOException e) {}
}
//编写线程程序,是服务器的线程(内部类)
class ServerThread extends Thread{
private Socket s=null;//线程部分创建一个客户端的插头
private PrintWriter writer=null;//用于同信的输入输出流
private BufferedReader br=null;
//构造函数(与内部类同名)
public ServerThread(Socket socket){
this.s=socket;
try {
//对br建立里连接,用于读取数据
InputStream in=socket.getInputStream();
InputStreamReader inreader=new InputStreamReader(in);
br=new BufferedReader(inreader);
//对writer建立连接用于发送数据
OutputStream out=socket.getOutputStream();
writer=new PrintWriter(out);
} catch (IOException e) {}
}
//线程中的发送消息方法
public void sendMsg(String msg){
if(writer!=null){
//如果输出流里面有东西,输出信息
writer.println(msg);
writer.flush();//刷新
}
}
//线程中接收消息的方法
public void run(){
//创建一个用与接收消息的变量
String str="";
while(true){//死循环让它一直在等待接受消息
try {
str=br.readLine();//读取消息
if(str.equals("haha")){
writer.close();
br.close();
s.close();
}
} catch (IOException e) {}
}
}
}
}
服务端的主程序:
public class JavaMainServer {
public static void main(String[] args) {
try {
ChatServer ss=new ChatServer(9999);
while(true){
ss.sendmsg("我是服务器");
Thread.sleep(1000);
}
} catch (Exception e) {}
}
}
客户端程序:
public class ChatClient extends Thread{
private Socket s=null;
private PrintWriter writer=null;
private BufferedReader reader=null;
//构造函数
public ChatClient(String ip,int port){
try {
//连接服务器
s=new Socket(ip, port);
} catch (Exception e) {}
start();
System.out.println("服务器里连接成功");
}
//发送消息
public void sendMsg(String msg){
if(s.isConnected()){//判断是否链接这在
writer.println(msg);
writer.flush();
}
}
//线程
public void run (){
while(true){
try {
InputStream is= s.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
reader=new BufferedReader(isr);
writer=new PrintWriter(s.getOutputStream(),true);
while (true) {
String message=reader.readLine();
System.out.println(message);
}
} catch (IOException e) {}
finally {
try {
writer.close();
reader.close();
s.close();
} catch (IOException e) {}
}
}
}
}
客户端主程序:
public class JavaMianClient {
public static void main(String[] args) {
ChatClient cc=new ChatClient("192.168.1.103", 9999);
Scanner scanner=new Scanner(System.in);
while(true){
cc.sendMsg("我是客户端");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
}
运行结果:
本篇就到这,欢迎大家留言讨论