java--socket实现一个客户端像另一个客户端发送信息

首先建立接收方socket服务端

package com.haier.socket.server;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

import org.apache.log4j.Logger;

import com.haier.socket.PolicyServer;

public class TVServer implements Runnable {
	private Logger logger = Logger.getLogger(this.getClass().getName());

	private Socket client;

	public TVServer(Socket client) {
		this.client = client;
	}

	public void run() {
		logger.info("TV:client对象:" + client);
		try {
			BufferedReader in = new BufferedReader(new InputStreamReader(
					client.getInputStream()));
			String flag = "aa";
			logger.info("TV:flag :" + flag);

			// 获取TV端SOCKET连接,将数据传给TV端
			PolicyServer.tvSocketMap.put(flag, client);
		} catch (Exception e) {
			logger.info("error in the close the socket!");
			e.printStackTrace();
		} finally {

		}
	}
}

再创建发送socket服务端

package com.haier.socket.server;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import org.apache.log4j.Logger;

import com.haier.bean.PolicyBean;
import com.haier.json.PolicyJson;
import com.haier.socket.PolicyServer;

public class WEBServer implements Runnable {
	private Logger logger = Logger.getLogger(this.getClass().getName()); 

	private Socket WebSocket;

	public WEBServer(Socket client) {
		this.WebSocket = client;
	}

	public void run() {
		logger.info("web:client对象:"+ WebSocket);
		Socket tvSocket = null;
		try {
			// web端
			BufferedReader webIn = new BufferedReader(new InputStreamReader(
					WebSocket.getInputStream()));

			while(true){
	 			String webStr = webIn.readLine();
	 			if("bye".equals(webStr)){
	 				break;
	 			}
				PrintWriter webOut = new PrintWriter(WebSocket.getOutputStream());
				webOut.println("收到信息...");
				webOut.flush();

//				PolicyBean policyBean = PolicyJson.getMacJson(webStr);
				String key = "aa";
				logger.info("key: " + key + ",web:" + webStr);

				// 获取TV端SOCKET连接,将数据传给TV端
				tvSocket = PolicyServer.tvSocketMap.get(key);
				PrintWriter tvOut = new PrintWriter(tvSocket.getOutputStream());
				tvOut.println(webStr);
				tvOut.flush();
			}

			tvSocket.close();
			WebSocket.close();
		} catch (Exception e) {
			logger.info("error in the close the socket!");
			e.printStackTrace();
		} finally {

		}
	}
}

创建两个测试客户端,一个接受、一个发送client

package com.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ClientWEB {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

		Socket client = new Socket("localhost", 9001);

		BufferedReader in = new BufferedReader(new InputStreamReader(
				client.getInputStream()));
		PrintWriter out = new PrintWriter(client.getOutputStream());

		BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
		while (true) {
			String str = wt.readLine();
			// String str = "jonathan";
			out.println(str);
			out.flush();
			System.out.println("client2:" + in.readLine());
		}
	}

}
package com.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ClientTV {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{

		Socket client = new Socket("localhost", 9000);

		BufferedReader in = new BufferedReader(new InputStreamReader(
				client.getInputStream()));
		PrintWriter out = new PrintWriter(client.getOutputStream());

		while (true) {
			String str = in.readLine();
			System.out.println("client1:" + str);
			// String str = "jonathan";
		}
	}

}
时间: 2024-08-11 16:18:20

java--socket实现一个客户端像另一个客户端发送信息的相关文章

Java Socket应用(六)——服务器响应客户端

转载请注明:http://blog.csdn.net/uniquewonderq 通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; imp

java socket处理--修改输入、输出流

近期要做一个流媒体播放器,支持rtsp播放过程中,要记录客户端请求的信息(解析rtsp 请求信息,获取想要的参数).这时用到了对socket  输入.输出流拦截.处理的操作. 为了提高系统性能,引入的多线程操作,详见代码. 一.程序入口,启动多线程: import java.net.ServerSocket;import java.net.Socket; public class SocketProxy {    /**     * @param args     */    public st

Java]Socket和ServerSocket服务器端接受数据

java socket 与  ServerSocket 某次写一个智能设备上传数据,数据每次三秒一条,然后使用c++写的客户端,没有对应java的源码,只能自己手写了,期间各种问题现在总结下 首先用的框架是ssh(我想用那个应该是没什么差别),因为是添加到web项目中的,so我想到的是tomcat启动的时候启动,于是首先必须要有的是后台程序,否则tomcat无法启动成功:话不多说,上源码... web.xml中我最后选用的是listener  监听还有一种是servlet  应该都可以 我最后选

项目日志之基于Java socket的网络通讯

Java API网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递.我们打算通过Java中基于Socket的网络编程实现一个简单的网络通信程序.这就是我们团队项目(开发一款简单的通讯软件,其基本功能是实现一对一的网络信息通讯,并努力向一对多和多对多靠近)的主要内容. 一.Java socket通信开发原理(查阅资料): 服务器使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端

java socket之传输实体类对象

一.TCP编程     TCP协议是面向连接的.可靠地.有序的,以字节流的方式发送数据.java实现TCP通信依靠2个类:客户端的Socket类和服务器端的ServerSocket类. 基于TCP通信的Socket模型如下: Socket通信的实现步骤如下: 1.    创建服务器端Socket:ServerSocket和客户端Socket:Socket: 2.    打开连接到Socket的InputStream/OutputStream; 3.    按照协议对Socket进行读写操作: 4

Java Socket编程之UDP

UDP编程: 将要传输的数据定义成数据包(Datagram),在数据报中指明所要到达的Socket(主机地址和端口号),然后再将数据报发送出去. 相关操作类:     DatagramPacket   数据报包 DatagramSocket   进行端到端通信的类 服务器端实现步骤: 创建DatagramSocket,指定端口号 创建DatagramPacket 接收客户端发送的数据信息 读取数据 客户端实现步骤: 定义发送信息 创建DatagramPacket,包含将要发送的信息 创建Data

java socket 参数

Java socket参数选项: TCP_NODELAY:  表示立即发送数据 SO_RESUSEADDR:  表示是否允许重用socket所绑定的本地地址 SO_TIMEOUT :  表示接收数据时的等待超时时间 . 单位为毫秒,默认值为0 , 表示永远等待. SO_LINGER:  表示当执行 socket的close方法的时候,是否立即关闭底层的socket . 这个单位是秒. SO_SNFBUF:  发送数据的缓冲区大小 SO_RCVBUF:  接收数据的缓冲区大小 SO_KEEPLIV

Java socket详解

参考 https://www.jianshu.com/p/cde27461c226 刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白.特抽时间整理一下,详细讲述Java socket通信原理和实现案例.整个过程楼主都是通过先简单明了的示例让大家了解整个基本原理,后慢慢接近生产实用示例,先概况后脉络给大家梳理出来的,所有涉及示例都可以直接拷贝运行.楼主才疏学浅,如有部分原理错误请大家及时指正. 请尊重作者劳动成果,转载请标明原文链接:https://www.ji

java socket 基于UDP/IP 协议

Java  socket 基于UDP/IP协议应用 服务器端:  1.创建DatagramSocket,指定端口号 2.创建DatagramPacket 3.接收客户端发送的数据 4.读取数据 客户端: 1.  定义发送信息: 服务器的IP 端口号  发送的内容 2.  创建DatagramPacket,包含将要发送的信息 3.  创建DatagramSocket 4.  发送数据 服务器端 import java.io.IOException; import java.net.Datagram

java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理

异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connected) { String str = dis.readUTF(); 当窗口关闭后,Socket已经关闭,读的操作还在继续 处理这个异常,代码如下 catch (SocketException e) { System.out.println("a client has been closed!&quo