socket java 多线程_java网络编程之多客户端多线程连接Socket

服务器端:package p3;

import java.io.IOException;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

//多线程版本,一直监听,客户端做的事情是现在线程应该做的事情

public class SocketServer {

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

ServerSocket serverSocket = new ServerSocket(5000);

Socket socket;

//接受客户端传输的对象

LoginThread loginThread;

while (true){

socket = serverSocket.accept();

loginThread = new LoginThread(socket);

loginThread.start();

}

}

}

线程类:package p3;

import java.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.OutputStream;

import java.net.Socket;

public class LoginThread extends Thread {

private Socket socket;

public LoginThread(Socket socket){

this.socket = socket;

}

@Override

public void run() {

try {

//打开输入输出流

InputStream is=socket.getInputStream();

OutputStream os=socket.getOutputStream();

//反序列化

ObjectInputStream ois=new ObjectInputStream(is);

//获取客户端信息,即从输入流读取信息

//BufferedReader br=new BufferedReader(new InputStreamReader(ois));

User user=(User)ois.readObject();

if(!(user==null)){

System.out.println(Thread.currentThread().getName() + "-------->" +user.toString());

}

//给客户端一个响应,即向输出流写入信息

String reply=Thread.currentThread().getName()+"欢迎你,登录成功!";

os.write(reply.getBytes());

//关闭资源

ois.close();

os.close();

is.close();

socket.close();

}  catch (IOException e) {

e.printStackTrace();

}catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

客户端1:package p3;

import java.io.*;

import java.net.Socket;

public class SocketClient {

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

Socket socket = new Socket("localhost",5000);

//请求服务器

OutputStream outputStream = socket.getOutputStream();

ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);

User user = new User("admin","123456");

objectOutputStream.writeObject(user);

//接受服务器响应

InputStream inputStream = socket.getInputStream();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

String line = bufferedReader.readLine();

while (line!=null){

System.out.println(line);

line = bufferedReader.readLine();

}

//释放资源

outputStream.close();

objectOutputStream.close();

inputStream.close();

bufferedReader.close();

}

}

客户端2:package p3;

import java.io.*;

import java.net.Socket;

public class SocketClient2 {

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

Socket socket = new Socket("localhost",5000);

//请求服务器

OutputStream outputStream = socket.getOutputStream();

ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);

User user = new User("admin2","1234562");

objectOutputStream.writeObject(user);

//接受服务器响应

InputStream inputStream = socket.getInputStream();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

String line = bufferedReader.readLine();

while (line!=null){

System.out.println(line);

line = bufferedReader.readLine();

}

//释放资源

outputStream.close();

objectOutputStream.close();

inputStream.close();

bufferedReader.close();

}

}

User类:package p3;

import java.io.Serializable;

public class User implements Serializable {

private String name;

private String pwd;

@Override

public String toString() {

return "User{" +

"name='" + name + '\\'' +

", pwd='" + pwd + '\\'' +

'}';

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public User(String name, String pwd) {

this.name = name;

this.pwd = pwd;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值