黑马程序员_多线程socket聊天室

本文介绍如何利用ASP.Net创建一个多线程的Socket聊天室服务端。通过几步简单操作,实现服务端的功能,支持与Android、iOS设备进行通信。

—————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————

首先来进行服务端的编写,服务端几个小步骤:


//1、创建socket

ServerSocket server = new ServerSocket();
Socket socket = server.accept();	//监听作用,该方法为阻塞式

//2、创建流
DataInputStream ds = new DataInputStream(socket.getInputStream());

//3、进行数据的读写
String message = ds.readUTF();
System.out.println(message);

然后编写客户端,与服务器端大致相同,少了监听的方法。


//1、创建socket
Socket s = new Socket("127.0.0.1",6665);.

//2、创建流
DataOutputStream dos = new DataOutputStream(s.getOutputStream());

//3、进行数据的读写
Scanner scanner = new Scanner(System.in);
String string=scanner.next();
dos.writeUTF(string);
dos.flush();

//4、用完了关闭
dos.close();
s.close();

以上就是大体的流程,然而我们需要多个人同时进入聊天室,则需要改成多线程的,代码如下

服务端:

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


public class Chat {
	public static void main(String[] args) {
		ServerSocket server = null;
		
		try {
			server = new ServerSocket(6665);
		} catch (IOException e) {
			System.out.println("端口被占用,创建端口失败。");
		}
		Socket socket = null;
		while (true){
			try {
				socket = server.accept();
			} catch (IOException e) {
				System.out.println("客户端连接失败。");
			}
			new Thread(new Rev(socket)).start();
		}
	}
}

class Rev implements Runnable{
	Socket socket = null;
	
	Rev(Socket socket){
		this.socket = socket;
	}
	
	public void run(){
		String ip=socket.getInetAddress().toString();
		try {
			while(true){
			DataInputStream ds = new DataInputStream(socket.getInputStream());
			String message = ds.readUTF();
			System.out.println(ip+":   "+message);
			}
		} catch (IOException e) {
			System.out.println("客户端"+ip+"已退出!");
		}
	}	
}

客户端:


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

class Client{
	public static void main(String args[]) throws Exception{
		Socket s = new Socket("127.0.0.1",6665);
		
		OutputStream os = s.getOutputStream();
		DataOutputStream dos = new DataOutputStream(os);
		while(true){
			Scanner scanner = new Scanner(System.in);
			String string=scanner.next();
			if (string.equals("exit")){
				System.out.println("退出了~");
				s.shutdownInput();
				dos.close();
				s.close();
				System.exit(0);
			}
			dos.writeUTF(string);
			dos.flush();
		}
	}
}


—————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值