Java如何实现不同局域网TCP通信+群聊+私聊(云服务器实现)

继上一篇实现群聊,现在记录私聊的实现,下一篇记录一下实现文件的传输。

socket keepalive理解 - 小小小小涛 - 博客园 (cnblogs.com)

目录

一、实现思路

1.实现思路一

2.实现思路二

二、实现代码

1.思路一(服务端代码)

2.思路二(服务端代码)

三、运行效果


一、实现思路

用户输入@name的方式发送消息(类似于QQ你@别人),但是想通过服务器端从信息中解析出这个@的人的名字不太可能,因为服务器端不知道截多长才是用户的名字。所以只能判断信息中是否包含了@name。String类的contains()方法可以做到。

服务端有以下两种思路去实现私聊

1.实现思路一

先判断用户是否@人了。

如果@人了,则发送消息的用户的服务套接字让其他的服务套接字判断这个@的名字是不是自己服务的用户的名字,如果是就转发,不是就不转发。

如果没@,则全部转发。

2.实现思路二

先判断用户是否@人了。

如果@人了,发送消息的用户的服务套接字根据@的名字让该名字的服务套接字转发。(哈希表)

如果没@,则全部转发。

二、实现代码

我们的用户端只负责输入,因此只需要改变服务端的代码。(这里也只记录服务器端的代码,用户端的代码和工具类代码在上一篇)。

1.思路一(服务端代码)

import java.io.Closeable;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

import com.csi.qunliaoTest.OpenClient.ReceiveMsgThread;



public class OpenServer {
	//一个列表存储服务Socket
	List<ClientSocket> clientSockets =new ArrayList<>();   
	
	ServerSocket serverSocket = null;   
	 
	 //构造方法中创建服务器ServerSocket
	public  OpenServer() {
		try {
			//因为本代码是在云服务器运行,直接用InetAddress.getLocalHost()方法绑定云服务器的IP地址及端口号
			serverSocket = new ServerSocket(7777, 50, InetAddress.getLocalHost()); 
			System.out.println("----------服务器----------");
			
		} catch (IOException e) {
			//发生异常。调用自己写的Utils类关闭服务器
			Utils.close(serverSocket);
		}
		
		   //ServerSocket绑定成功,开始等待用户接入
		if(serverSocket.isBound())
			acceptClient();
	}
	
	//等待用户,并为他生成服务Socket
	private void acceptClient(){
		//while循环让服务器一直可以接入用户,一个用户接入服务器,服务器就生成一个为该用户服务的Socket
		while(true) {
			Socket	socket=null;
			try {
				
				//ServerScoket的accept()方法是一个阻塞方法,他会在这里等用户接入,直到有用户接入,才会运行下面的代码
				socket=serverSocket.accept();
				System.out.println("一个用户接入.....");
				//用ClientSocket类包装Scoket
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值