Java多线程Socket在控制台输出的多人聊天室编程

java

服务器端代码

 1 import java.io.IOException;

2 import java.net.ServerSocket;

3 import java.net.Socket;

4 import java.util.ArrayList;

5

6 public class Server {

7

8 private static ArrayList<Socket> list = new ArrayList<Socket>();

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

10 ServerSocket server = new ServerSocket(9999);

11 while(true){

12 Socket socket = server.accept();

13 list.add(socket);

14 new ServerThread(socket,list).start();;

15 }

16

17 }

18

19

20

21 }

客户端代码

 1 import java.io.IOException;

2 import java.net.Socket;

3 import java.net.UnknownHostException;

4

5 public class Client {

6

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

8 Socket socket = new Socket("127.0.0.1",9999);

9 new ThreadWriter(socket).start();

10 new ThreadReader(socket).start();

11 }

12

13 }

服务器处理socket的多线程

 1 import java.io.IOException;

2 import java.io.InputStream;

3 import java.io.OutputStream;

4 import java.net.Socket;

5 import java.util.ArrayList;

6

7 public class ServerThread extends Thread {

8

9 Socket socket;

10 ArrayList<Socket> list;

11 InputStream is;

12 OutputStream os;

13 public ServerThread(Socket socket, ArrayList<Socket> list) {

14 this.socket = socket;

15 this.list = list;

16 }

17

18 @Override

19 public void run() {

20 try {

21 while(true){

22 is = socket.getInputStream();

23 byte[] b = new byte[1024];

24 int len = is.read(b);

25 String str = new String(b,0,len);

26 System.out.println(str);

27 for(Socket socket:list){

28 os = socket.getOutputStream();

29 os.write(str.getBytes());

30 }

31 }

32

33 } catch (IOException e) {

34 e.printStackTrace();

35 }

36 }

37

38 }

读取客户端输入流多线程代码

 1 import java.io.IOException;

2 import java.io.InputStream;

3 import java.net.Socket;

4

5 public class ThreadReader extends Thread {

6

7 Socket socket;

8 public ThreadReader(Socket socket) {

9 this.socket = socket;

10 }

11

12 @Override

13 public void run() {

14 try {

15 while(true){

16

17 InputStream is = socket.getInputStream();

18 byte[] b = new byte[1024];

19 int len = is.read(b);

20 String str = new String(b,0,len);

21 System.out.println(str);

22 }

23 } catch (IOException e) {

24 // TODO Auto-generated catch block

25 e.printStackTrace();

26 }

27 }

28

29 }

客户端发送数据多线程代码

 1 import java.io.IOException;

2 import java.io.OutputStream;

3 import java.net.Socket;

4 import java.util.Scanner;

5

6 public class ThreadWriter extends Thread {

7

8 Socket socket;

9 public ThreadWriter(Socket socket) {

10 this.socket = socket;

11 }

12

13 @Override

14 public void run() {

15 try {

16 Scanner sc = new Scanner(System.in);

17 while(true){

18 String str = sc.next();

19 OutputStream os = socket.getOutputStream();

20 os.write(str.getBytes());

21 }

22 } catch (IOException e) {

23 // TODO Auto-generated catch block

24 e.printStackTrace();

25 }

26 }

27

28 }

以上是 Java多线程Socket在控制台输出的多人聊天室编程 的全部内容, 来源链接: utcz.com/z/394364.html

回到顶部