Socket通讯的简单用法
1.客户端
package Thread; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Click { public static void main(String[] args) throws UnknownHostException, IOException { Click click=new Click(); click.start(); } private Socket socket; public Click() throws UnknownHostException, IOException { socket=new Socket("localhost", 8088);//连接指定的地址和端口 } public void start() throws IOException { System.out.println("欢迎你,"+socket.getInetAddress()); PrintWriter pw=null; //创建一条线程读取 服务器端发送过来的信息。 Thread t=new Thread(new ServerHandler()); t.setDaemon(true);//守护线程 t.start(); try { // 输出流,将客户端的消息发送出去 pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"),true); Scanner scan=new Scanner(System.in); while(true){ pw.println(scan.nextLine()); } } catch (UnsupportedEncodingException e) { System.out.println("io流异常"); } finally { if(socket!=null) { socket.close(); } } } //读取服务端发送的消息 class ServerHandler implements Runnable{ public void run() { BufferedReader br=null; try { br=new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8")); System.out.println(br.readLine()); } catch (IOException e) { System.out.println("IOException"); } } } }
2.服务端
package Thread; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Server { public static void main(String[] args) throws IOException { Server server=new Server(); server.start(); } //成员变量 private ExecutorService threadPool; private ServerSocket serverSocket; private List<PrintWriter>allOut; public Server() throws IOException {//初始化变量 serverSocket=new ServerSocket(8088); threadPool=Executors.newFixedThreadPool(3); allOut=new ArrayList<PrintWriter>(); } public void start() { try { while(true) { System.out.println("等待客户端连接"); Socket socket=serverSocket.accept();//监听客户端的连接 //每连接一条线程 threadPool.execute(new ClickHandler(socket)); } } catch (IOException e) { System.out.println("socket Exection"); } } class ClickHandler implements Runnable{ private Socket socket; public ClickHandler(Socket socket) { this.socket=socket; } //线程同步 public synchronized void addOut(PrintWriter pw) { allOut.add(pw); } public synchronized void pwClose(PrintWriter pw) { pw.close(); } public void run() { BufferedReader br; PrintWriter pw=null; try { System.out.println(socket.getInetAddress()+"连接成功"); br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8")); //使用输出流将信息发到客户端 pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"), true); addOut(pw); String message=null; while((message=br.readLine())!=null) { for(PrintWriter p:allOut) { if(p!=pw) { p.println(socket.getInetAddress()+":"+message); } } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { pwClose(pw); if(socket!=null) { try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } }
end
Socket通讯的简单用法的更多相关文章
- erlang和java的socket通讯----最简单,初次实现。
直接上源码,留做纪念. 有点简单,大家不要笑,初次实现. 功能描述:java发送数据给erlang,erlang将收到的数据重复两次再发送给java. erlang源码:模块tcp_listen -m ...
- 闲来无事,写个基于TCP协议的Socket通讯Demo
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...
- 试解析Tomcat运行原理(一)--- socket通讯
关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...
- java socket通讯(一) 入门示例
一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯
Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...
- 利用BlazeDS的AMF3数据封装与Flash 进行Socket通讯
前几天看到了Adobe有个开源项目BlazeDS,里面提供了Java封装AMF3格式的方法.这个项目貌似主要是利用Flex来Remoting的,不过我们可以利用他来与Flash中的Socket通讯. ...
- c#写个基础的Socket通讯
晚上想写点东西,想想把我刚来公司学的Sockt通讯写上来吧.要写的简单易懂点,新人们可以借鉴下哦,用控制台写. 先得说说Socket,与TCP/UDP啥关系,一直讲什么Socket通讯,TCP通讯,都 ...
- Silverlight下的Socket通讯
http://www.cnblogs.com/chengxingliang/archive/2012/05/24/2515100.html 在Silverlight中进行通讯,只能使用4502-453 ...
- 试解析Tomcat运行原理(一)--- socket通讯(转)
关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...
随机推荐
- 0101-ioc
背景 ioc是spring的基础,即控制反转.springboot基于注解使用ioc. ioc spring称所有被管理的对象为bean, spring ioc主要通过描述的方式完成3类bean的管理 ...
- mysql合并结果集
- vue数据变化后页面刷新
在测试methods和conputed区别的时候,我在methods方法体内增加了一个vue数据自增语句,类似于this.abc++;导致整个页面无法加载出来. 原因是this.abc改变 会触发页面 ...
- vSphere vSwitch网络属性配置详解
1.安全 混杂模式:把vSwitch当成是一个hub,同一台交换机上面所有的虚拟机都能接受到二层数据包. MAC地址更改:当vSwitch上面连接的某一个虚拟机MAC地址发生更改时,vSwitch是否 ...
- 一个基于chrome扩展的自动答题器
1.写在前面 首先感谢小茗同学的文章-[干货]Chrome插件(扩展)开发全攻略, 基于这篇入门教程和demo,我才能写出这款 基于chrome扩展的自动答题器. git地址: https://git ...
- 【LeetCode】反转每对括号间的子串
[问题]给出一个字符串 s(仅含有小写英文字母和括号). 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果. 注意,您的结果中 不应 包含任何括号. 示例 : 输入:s = ...
- .nerCore-RabbitMQDemo消息队列
1.定义:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.MQ是消费- ...
- Codeforces Round #616 (Div. 2) 题解
A. Even But Not Even 题意: 定义一个数所有位置的和为偶数它本身不为偶数的数为ebne,现在给你一个数字字符串,你可以删除任意位置上的数字使其变为ebne输出任意改变后的结果,如果 ...
- java调用存储过程(stored procedures)的HelloWorld例子
1.java调用存储过程(stored procedures)的HelloWorld程序 有点数据 库基础的人都知道.存储过程(stored procedures)和java没什么关系.它是一段纯粹的 ...
- 【转】JS字符(字母)与ASCII码转换方法
var strVariable; for(var i=0;i<25;i++) { console.log(String.fromCharCode((65+i))); } strVariable. ...