- 浏览: 470195 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chexiazi:
一样的xml代码 报这个错 <ns1:XMLFault ...
CXF 通过用户名和密码进行验证 -
di1984HIT:
谢谢啊 ~~~
通过JavaCompiler进行编译java文件(转载) -
aa00aa00:
'%${userName}%' 这种是可以的,是可以模糊查询的 ...
mybatis 模糊查询 -
一棵杨柳的地盘:
我把你的代码不了一遍 但是汇报错首先:static { ...
CXF 通过用户名和密码进行验证 -
shangmin1990:
转 IntelliJ IDEA 编辑器生成 Hibernate 实体映射文件
最近闲来无聊,看了一下socket通信,实现了一个最简版的客户端与客户端通信。
如果想通过客户端与客户端通信,有两种解决方案,一、使用服务器端进行转发,二、使用p2p技术
这里是使用服务器端进行转发写的例子,代码比较简陋,
主要思想是:
1、服务器端开启对socke的读写线程,用来监听客户端的通信
2、服务器端保存客户端登录的信息,使用一个map来装,保存维护该客户端的线程名、线程。
3、当客户端发来信息,进行分析,分析出是给哪一个客户端(维护客户端的线程)发送的信息,然后服务器端调用该线程的发送方法,发送给对应的客户端
下面是简陋的代码:
服务器端:MainServer
写道
package com.wang.server;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.Socket;
import com.wangcanpei.util.Util;
public class MainServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket=new ServerSocket(8888);
while(true){
Socket socket=serverSocket.accept();
System.out.println(socket.getPort());
ServerThread serverThread=new ServerThread(socket);
System.out.println(serverThread.getName());
serverThread.start();
Util.map.put(serverThread.getName(),serverThread);
}
}
}
public static void main(String[] args) throws Exception {
ServerSocket serverSocket=new ServerSocket(8888);
while(true){
Socket socket=serverSocket.accept();
System.out.println(socket.getPort());
ServerThread serverThread=new ServerThread(socket);
System.out.println(serverThread.getName());
serverThread.start();
Util.map.put(serverThread.getName(),serverThread);
}
}
}
------------------------------------------------------------------------------------------------
ServerThread
写道
package com.wang.server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.wangcanpei.util.Util;
public class ServerThread extends Thread{
private Socket socket;
OutputStream os = null;
BufferedWriter bw = null;
BufferedReader br = null;
InputStream is = null;
public ServerThread(Socket socket){
this.socket=socket;
}
public void write(String line){
try {
bw.write(line + "\r");
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
is = socket.getInputStream();
os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
br = new BufferedReader(new InputStreamReader(is));
while (true) {
//从客户端得到信息
String line = br.readLine();
//br = new BufferedReader(new InputStreamReader(System.in));
//这段代码是为了广播给所有的用户
// Map<String,Thread> map=Util.map;
// Set<String> set=map.keySet();
// for(Iterator<String> it=set.iterator();it.hasNext();){
// String key=it.next();
// ServerThread thread=(ServerThread)map.get(key);
// thread.write(line);
// }
//
//这段代码是为了给特定的用户发送
//分析客户端发送过的信息,看看是要发给谁?
Map<String,Thread> map=Util.map;
String who=line.substring(line.lastIndexOf("@")+1,line.length());
System.out.println("who"+who);
ServerThread thread=(ServerThread)map.get(who);
String message=line.substring(0,line.lastIndexOf("@"));
System.out.println("message"+message);
thread.write(message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
bw.close();
br.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.wangcanpei.util.Util;
public class ServerThread extends Thread{
private Socket socket;
OutputStream os = null;
BufferedWriter bw = null;
BufferedReader br = null;
InputStream is = null;
public ServerThread(Socket socket){
this.socket=socket;
}
public void write(String line){
try {
bw.write(line + "\r");
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
is = socket.getInputStream();
os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
br = new BufferedReader(new InputStreamReader(is));
while (true) {
//从客户端得到信息
String line = br.readLine();
//br = new BufferedReader(new InputStreamReader(System.in));
//这段代码是为了广播给所有的用户
// Map<String,Thread> map=Util.map;
// Set<String> set=map.keySet();
// for(Iterator<String> it=set.iterator();it.hasNext();){
// String key=it.next();
// ServerThread thread=(ServerThread)map.get(key);
// thread.write(line);
// }
//
//这段代码是为了给特定的用户发送
//分析客户端发送过的信息,看看是要发给谁?
Map<String,Thread> map=Util.map;
String who=line.substring(line.lastIndexOf("@")+1,line.length());
System.out.println("who"+who);
ServerThread thread=(ServerThread)map.get(who);
String message=line.substring(0,line.lastIndexOf("@"));
System.out.println("message"+message);
thread.write(message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
bw.close();
br.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Util
写道
package com.wang.util;
import java.util.HashMap;
import java.util.Map;
public class Util {
public static Map<String,Thread> map=new HashMap<String,Thread>();
}
import java.util.HashMap;
import java.util.Map;
public class Util {
public static Map<String,Thread> map=new HashMap<String,Thread>();
}
客户端
MainClient
写道
package com.wang.client;
import java.io.IOException;
import java.net.Socket;
public class MainClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 8888);
Thread clientInput = new ClientThreadInput(socket);
Thread clientOut = new ClientThreadOutput(socket);
clientInput.start();
clientOut.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.net.Socket;
public class MainClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 8888);
Thread clientInput = new ClientThreadInput(socket);
Thread clientOut = new ClientThreadOutput(socket);
clientInput.start();
clientOut.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
写道
package com.wang.client;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class ClientThreadOutput extends Thread {
private Socket socket;
public ClientThreadOutput(Socket socket) {
this.socket = socket;
}
public void run() {
OutputStream os = null;
BufferedWriter bw = null;
BufferedReader br = null;
try {
os = socket.getOutputStream();
while (true) {
bw = new BufferedWriter(new OutputStreamWriter(os));
br = new BufferedReader(new InputStreamReader(System.in));
bw.write(br.readLine() + "\r");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
os.close();
bw.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class ClientThreadOutput extends Thread {
private Socket socket;
public ClientThreadOutput(Socket socket) {
this.socket = socket;
}
public void run() {
OutputStream os = null;
BufferedWriter bw = null;
BufferedReader br = null;
try {
os = socket.getOutputStream();
while (true) {
bw = new BufferedWriter(new OutputStreamWriter(os));
br = new BufferedReader(new InputStreamReader(System.in));
bw.write(br.readLine() + "\r");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
os.close();
bw.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
写道
package com.wang.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import javax.swing.text.AbstractDocument.BranchElement;
public class ClientThreadInput extends Thread {
private Socket socket;
public ClientThreadInput(Socket socket) {
this.socket = socket;
}
public void run() {
InputStream is = null;
BufferedReader br = null;
try {
is = socket.getInputStream();
while (true) {
br = new BufferedReader(new InputStreamReader(is));
String line = null;
while (null != (line = (br.readLine()))) {
System.out.println("从服务器端得到的信息:" + line);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != is) {
try {
br.close();
is.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
代码非常简陋,写着玩的。但是大概思想已经表达清楚import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import javax.swing.text.AbstractDocument.BranchElement;
public class ClientThreadInput extends Thread {
private Socket socket;
public ClientThreadInput(Socket socket) {
this.socket = socket;
}
public void run() {
InputStream is = null;
BufferedReader br = null;
try {
is = socket.getInputStream();
while (true) {
br = new BufferedReader(new InputStreamReader(is));
String line = null;
while (null != (line = (br.readLine()))) {
System.out.println("从服务器端得到的信息:" + line);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != is) {
try {
br.close();
is.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
发表评论
-
java 位运算总结
2018-10-23 11:14 0<div class="iteye-blog- ... -
java sort 排序中的自然序排序总结
2018-10-23 11:07 5817<div class="iteye-blo ... -
Java内存分析工具
2012-11-24 11:16 2254Java运行时数据区包含:Method area, heap, ... -
转 StringUtils.isBlank()函数(分享一下)
2012-02-15 10:23 2988StringUtils的isBlank与isEmply ... -
jquery 使用ajax 提交整个表单的数据
2012-01-06 14:52 5919在使用Struts开发项目的时候发现很爽的一件事就是可以不使用 ... -
struts2 通配符
2011-12-31 16:25 1286在使用struts2时,如果想定义action的话可以这样做 ... -
Maven Web项目部署到Tomcat下
2011-12-30 17:28 19548通过Maven来搭建项目是 ... -
velocity与servlet的整合
2011-12-28 21:07 1458第一天学习velocity,参考别人的blog写了一个与Se ... -
ibatis 与spring3整合
2011-12-28 13:01 5729spring与ibates整合,使用 ... -
ibatis 入门
2011-12-28 12:48 1272昨天学习了一下ibatis ... -
转 JTA简介
2011-12-26 17:47 1063Java Transaction API(Java事务 ... -
转 IntelliJ IDEA 编辑器生成 Hibernate 实体映射文件
2011-12-23 16:03 23388很多人不知道怎么用 IntelliJ IDEA 编辑器 ... -
转 IntelliJ IDEA 使用基础篇 Java IDE编辑器
2011-12-23 15:02 8520IntelliJ IDE ... -
转在CXF中用JAXB数据绑定支持Map类型
2011-12-05 16:38 5232一些java类型不能自然映射成xml,例如,HashMap ... -
cxf wsdltojava 构造方法报错
2011-12-05 14:23 1324I'm marking this as "n ... -
(转)Struts2学习笔记--Internationalization
2011-11-21 18:13 1333Struts2 的国际化 ======== ... -
单例模式
2011-11-18 20:47 1015单例模式(SINGLETON):单例模式确保某一个类只有一个实 ... -
类加载的顺序
2011-11-17 21:40 1192写道 package com.wang; public cl ... -
接口设计的 11 种原则
2011-05-02 21:02 27447种设计坏味道 1.僵化性: 很难对系统进行改动,因为每个改动 ... -
Maven2 安装jar到你的资源库
2011-04-26 18:01 1156将一个jar文件添加到你的资源库里面 首先是安装maven2 ...
相关推荐
C#利用Socket实现客户端之间直接通信 实验功能: 设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)...
当有客户端连接时,accept()方法会被阻塞,直到客户端发起连接请求,此时服务器会返回一个新的socket用于与客户端通信。 `client.py`文件则代表了客户端的代码,它创建socket对象,连接到服务器的IP和端口。客户端...
这将返回一个新的Socket对象,专门用于与该客户端通信。 5. **数据交换**:通过Accept得到的Socket对象,服务器可以使用Receive和Send方法接收和发送数据。 6. **异常处理**:为了保证服务的稳定性,服务器端需要...
Socket实现客户端与服务端通信源码 程序说明: 开发工具:Visual Studio 2005 本程序演示了Socket通信的基本原理,非常适合初学者。程序分为两部分:服务器端与客户端,实际上客户端也可以充当服务器端,本程序两端...
- 接受连接:`conn, addr = s.accept()`,返回一个新的Socket对象`conn`用于与客户端通信。 - 读写数据:`conn.sendall(data)`发送数据,`data = conn.recv(buffer_size)`接收数据。 2. **客户端实现**: - 创建...
在Linux操作系统中,使用套接字(socket)是实现客户端与服务端通信的常用方法。套接字是一种网络编程接口,允许应用程序通过网络发送和接收数据。本篇将详细讲解如何在Linux环境下利用socket实现客户端和服务端之间...
本项目"**C# socket实现服务器客户端通信**"是针对TCP/IP协议进行设计的,通过Visual Studio 2012(VS1012)开发环境构建,它涵盖了服务器端和客户端的实现,让我们深入探讨这一主题。 首先,Socket是基于TCP/IP...
android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信
在QT框架中,C++ Socket通信是实现网络数据交换的基础,它允许客户端和服务端通过网络进行数据传输。本文将深入探讨如何在QT中使用C++编写客户端和服务端的socket通信代码,以及涉及到的关键操作。 首先,我们需要...
4. **接受连接**:当有客户端连接时,服务器调用`Accept()`方法接收连接,并返回一个新的Socket用于与客户端通信。 ```csharp Socket clientSocket = serverSocket.Accept(); ``` 5. **读写数据**:使用`Receive()...
"Socket编程实现客户端和服务器端通信" 本文将详细介绍使用Socket实现客户端和服务器端通信的知识点,包括Socket的基本概念、Socket编程模型、服务器端和客户端的实现、数据传输和处理、线程安全和控件更新等方面。...
在多客户端通信的场景下,每个客户端都需要有自己的Socket实例,以便独立发送和接收数据。为了处理多个客户端之间的通信,可以使用多线程或者异步编程模型,比如`async/await`。每个客户端线程或异步任务都可以监听...
4. 接受连接:当有客户端连接时,`socket_accept`函数会返回一个新的SOCKET,用于与客户端通信。 ```php $client_socket = socket_accept($server_socket); ``` 5. 读写数据:通过新建立的SOCKET,使用`socket_read...
Java基于socket实现的客户端和服务端通信功能完整实例 在Java中,Socket是实现网络通信的基础,通过Socket可以实现客户端和服务器端之间的通信。本文将详细介绍Java基于Socket实现的客户端和服务端通信功能,包括...
在安卓客户端与Java服务器端的通信中,Socket扮演了桥梁的角色,允许数据在网络中流动。 1. **安卓客户端Socket通信**: - **建立连接**:在安卓客户端,我们通常会使用`java.net.Socket`类来创建一个Socket实例,...
Socket编程是计算机网络编程中的重要组成部分,主要用于实现客户端与服务器之间的双向通信。在这个场景中,我们探讨的是如何利用Socket在两台不同的计算机之间建立多个连接,实现数据的交互。首先,我们要理解Socket...
vc用socket实现客户端服务端通信,包含源代码,在vc里面新建并行工程
本教程将深入讲解C#中的Socket通信,包括客户端和服务器端的实现,以及如何通过源码学习相关知识。 首先,我们要理解Socket的基本概念。Socket,也称为套接字,是网络通信中的一个接口,它允许应用程序通过网络发送...
c#socket通信客户端,同步,源代码,华农版,马骏邮电电子出版社