package com.hope.fou;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;
public class ClientThread extends Thread{
private Socket client=null;
private InputStream in=null;
private OutputStream out=null;
public ClientThread() {
client=new Socket();
try {
client.connect(new InetSocketAddress("192.168.1.121",8888));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
in=client.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
while(!Thread.interrupted()){
byte[]buffer=new byte[1024];
int len=0;
try {
len=in.read(buffer);
System.out.println(new String(buffer,0,len));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void write() {
Scanner sc=new Scanner(System.in);
try {
out=client.getOutputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
this.start();
while(!Thread.interrupted()){
String str=sc.nextLine();
try {
out.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器
package com.hope.fou;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
public class ServerLink {
// 连接
private ServerSocket server = null;
private CopyOnWriteArrayList<Socket> copy = null;
public ServerLink() {
copy = new CopyOnWriteArrayList<Socket>();
}
public void link() {
try {
server = new ServerSocket();
server.bind(new InetSocketAddress("192.168.1.121", 8888));
while (!Thread.interrupted()) {
Socket client = server.accept();
copy.add(client);// 需要将请求连接的客户端
System.out.println(copy.size());
new ServerThread(copy, client).start();
}
// new ServerThread(copy, client).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.hope.fou;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class ServerThread extends Thread {
private CopyOnWriteArrayList<Socket> copy = null;
private Socket client = null;
private InputStream in = null;
private OutputStream out = null;
public ServerThread(CopyOnWriteArrayList<Socket> copy, Socket client) {
super();
this.copy = copy;
this.client = client;
try {
in = client.getInputStream();
out = client.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
// 负责将数据读出来并分发给所有的用户
while (!Thread.interrupted()) {
int len = 0;
byte[] buffer = new byte[1024];
try {
len = in.read(buffer);
System.out.println(copy.size());
System.out.println("__________");
//System.out.println(client.getInetAddress()+" "+new String(buffer,0,len) );
Iterator<Socket> it = copy.iterator();
while (it.hasNext()) {
Socket targetClient = it.next();
if (!targetClient.equals(client)) {
targetClient.getOutputStream().write(buffer, 0, len);
}
}
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
}
测试
public class ServerTest {
public static void main(String[] args) {
new ServerLink().link();
}
}
分享到:
相关推荐
QQ登录器是一个模拟腾讯QQ登录过程的程序,它旨在帮助用户理解QQ登录的基本原理和机制。这个项目包含两个主要文件:QQLogin.sln和QQLogin。QQLogin.sln是一个Visual Studio解决方案文件,它包含了项目的配置信息和...
通过解压这个压缩包,我们可以找到一个名为"15.1"的文件,这可能是源代码文件或者是一个项目目录。下面将详细讲解模拟手机QQ自动登录的相关知识点。 首先,我们要了解模拟登录的基本原理。模拟登录是指通过编程方式...
【模拟QQ截屏】是一款专为用户提供便捷截图功能的工具,尤其适合那些需要频繁进行屏幕截图的用户。这款软件能够模拟QQ内置的截图功能,让用户在没有打开QQ的情况下也能享受到类似的功能,极大地提升了工作效率。 ...
《模拟QQ实现详解》 QQ作为一款广受欢迎的即时通讯软件,其功能丰富,用户体验良好。为了学习和理解网络通信的原理以及客户端-服务器架构,我们可以尝试模拟QQ的实现。这个项目包括了客户端和服务器端的开发,以及...
使用易语言模拟QQ登录,使用易语言模拟QQ登录,使用易语言模拟QQ登录
QQ聊天系统是一个模拟腾讯QQ功能的聊天应用程序,旨在提供类似QQ的实时通讯体验。这个系统可能包括用户注册、登录、好友添加、群组创建、发送消息、接收消息、表情发送、文件传输等功能,旨在帮助用户进行线上沟通。...
运用socket 做的一个简易模拟qq
java模拟qq源码
此外,VC++集成了MFC(Microsoft Foundation Classes)库,这是一个基于C++的类库,用于简化Windows应用程序的开发,提供了一套用于构建用户界面的类,如对话框、控件、菜单等。 QQ模拟软件的核心功能可能包括以下...
在信息技术领域,模拟QQ视频聊天程序是一个常见的项目,旨在复制QQ(中国最流行的即时通讯软件之一)的核心视频聊天功能。通过使用.NET框架和C#编程语言,开发者可以创建一个类似QQ的应用,提供用户间进行实时视频...
在本项目"java模拟qq项目"中,我们将深入探讨如何使用Java语言来构建一个功能完备的QQ模拟器,包括群聊和私聊功能,并且连接到数据库以存储和检索用户数据。这个项目对于想要提升Java编程技能,尤其是对网络编程和多...
网络编程是计算机科学中的一个重要领域,它使程序能够通过网络进行通信,实现数据的交换和共享。在这个项目中,我们将关注客户端界面的构建以及与服务器端的交互。 首先,让我们来理解"模拟QQ会话界面"这一概念。QQ...
使用javascript和css+div以及JavaWeb结合开发一个模拟QQ的网页版
【标题】:“C#模拟登录QQ” 在网络安全与编程领域,模拟...通过以上步骤,你可以构建一个基本的C#模拟登录QQ的程序。但请注意,实际应用中可能还需考虑法律和道德问题,确保你的行为符合法律法规,并尊重他人的隐私。
标题中的“VB6模拟QQ截屏源码”指的是利用VB6编写的一个程序,其功能是模仿QQ的屏幕截图功能。在实际操作中,QQ截屏通常包括选取屏幕区域、捕获图像以及保存或分享图片等步骤。VB6通过调用Windows API函数来实现这些...
模拟QQ服务器的代码意味着作者试图构建一个类似QQ的功能系统,可能包括登录验证、好友列表管理、消息传递等功能,但要注意,这里的“中间版本”说明代码可能不完整,或者存在未解决的问题,可能无法正常运行。...
【Java模拟QQ登录空间】是Java编程领域中的一个实践项目,主要目的是通过编程技术实现对QQ空间的模拟登录。这个项目对于学习Java网络编程、HTTP协议、JSON解析以及网络安全等多方面知识具有重要意义。 首先,Java是...
在IT领域,构建一个模拟QQ聊天程序是一项挑战性的任务,涉及到网络编程、多线程以及数据结构等多个核心知识点。在这个项目中,我们主要关注的是`ServerSocket`、`Socket`和`HashMap`这三个标签所代表的技术。 首先...
QQ作为一款广受欢迎的即时通讯软件,其模拟开发涉及到多个IT领域的知识点。下面将详细解析这些领域的关键概念和实现步骤。...通过不断迭代和优化,可以打造出一个功能完备、用户体验优秀的模拟QQ应用。
在这个项目中,模拟QQ的基本功能可能包括用户注册、登录、查找好友、发送和接收消息等。实现这些功能时,需要设计合理的数据格式来封装消息,例如包含用户名、接收者ID、消息内容等信息。 5. 多线程处理: 为了...