java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实现。
服务器端----------------------------------------------------------------------------------------------------------------------------------------
socketServer:
package test; import java.net.ServerSocket;
import java.net.Socket; public class socketServer {
public static void main(String [] args){
ServerSocket ss = null;
Socket sk = null;
try{
System.out.println("create server socket....");
ss = new ServerSocket(3756);
System.out.println("wait for a connection....");
while(true) //服务器端一直监听这个端口,等待客户端的连接
{
sk = ss.accept(); //当有客户端连接时,产生阻塞
System.out.println("get a socket object..."); new socketThread(sk).start();//新建一个socketThread处理这个客户端的socket连接
}
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
finally{
try{
if(ss != null){
ss.close();
}
if(sk != null){
sk.close();
}
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
} }
socketThread:
package test; import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.*; public class socketThread extends Thread {
public Socket socket; public socketThread(Socket socket) {
this.socket = socket;
} public void run() {
PrintWriter pw = null;
Calendar c; try {
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
while(true)//服务器每隔3秒向客户端发送当前时间信息
{
Thread.sleep(3000);
c = Calendar.getInstance(); //获取当前时间
pw.println("Server Time:"+c.getTime().toString());
pw.flush();
} } catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
try {
if (pw != null) {
pw.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
} }
客户端----------------------------------------------------------------------------------------------------------------------------------------
socketClient:
package test; import java.io.PrintWriter;
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader; public class socketClient {
public static void main(String[] args) {
Socket sk = null;
BufferedReader br = null;
try {
sk = new Socket("localhost", 3756); br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
String line = null;
while((line = br.readLine()) != null){
System.out.println("Msg from server:"+line); //服务器端打印客户端发送的信息数据
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
try {
if (sk != null) {
sk.close();
}
if (br != null) {
br.close();
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
} }
服务端启动后,就会监听3756端口,每当有一个客户端请求时,就会新建一个socketThread来和客户端进行通讯(每隔3秒钟将服务端的时间发送到客户端)
java socket通讯(二)处理多个客户端连接的更多相关文章
- Java Socket通讯---网络基础
java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛 ...
- java socket通讯(一) 入门示例
一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...
- java socket通讯
本来是打算验证java socket是不是单线程操作,也就是一次只能处理一个请求,处理完之后才能继续处理下一个请求.但是在其中又发现了许多问题,在编程的时候需要十分注意,今天就拿出来跟大家分享一下. ...
- java socket 通讯
(转)http://blog.csdn.net/xn4545945/article/details/8098646
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯
Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯(转)
先交待一下业务应用背景:服务端:移动交费系统:基于C语言的Unix系统客户端:增值服务系统:基于Java的软件系统通迅协议:采用TCP/IP协议,使用TCP以异步方式接入数据传输:基于Socket流的 ...
- Java socket详解(转)
一:socket通信基本原理. 首先socket 通信是基于TCP/IP 网络层上的一种传送方式,我们通常把TCP和UDP称为传输层. 如上图,在七个层级关系中,我们将的socket属于传输层,其中U ...
- Java socket详解
参考 https://www.jianshu.com/p/cde27461c226 刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白.特抽时间整理一下,详细讲述Ja ...
- Java Socket 编程
1. 背景 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和 ...
随机推荐
- Exploring the Angular 1.5 .component() method
Angular 1.5 introduced the .component() helper method, which is much simpler than the.directive() de ...
- TaffyDB:开源JavaScript数据库
你是否曾经注意到javascript的对象有点像数据库中的记录,你把很多javascript对象包装到一起时就像是你在处理一个数据库中的表,TaffyDB是一个Javascript库,它提供了强大的数 ...
- js停止冒泡和阻止浏览器默认行为
停止冒泡通用方法: function stopBubble(e) { //如果提供了事件对象,是非IE浏览器 if ( e && e.stopPropagation ) //使用W3C ...
- linux 命令之系统活动报告sar
打开自己的CentOS,敲入“sar”,表示很失望: [root@localhost ~]# sar bash: sar: command not found 竟然没有安装,不过还好linux下安装还 ...
- 用javacsv API 来操作csv文件
javacsv是国外开发的一个比较好的操作csv文件的API,这里简单讲一下用法. 先下载javacsv2.0.zip的文件,解压后,把javacsv.jar 添加到项目中. 本站下载地址: htt ...
- 封装类的方式访问数据库(封装字符串、json)
<?php class DBDA { public $host="localhost";//服务器地址 public $uid="root";//用户名 ...
- 借助HTML分别禁用IE8, IE9的兼容视图模式的小技巧
IE 添加了兼容模式,开启后会以低一版本的 IE 进行渲染,但是我就遇到了一种情况,在 IE8 下只有不使用兼容模式页面才能显示正常,下面有个不错的方法可以解决这个问题 从 IE 8 开始,IE 添加 ...
- quotas and disk replace on netapp
==================================================================================================== ...
- android学习笔记24——事件处理
事件处理 android提供了两种事件处理机制: 1.基于回调的事件处理 2.基于监听器的事件处理(通过绑定特定事件监听器) 注意: android对于基于回调的事件处理而言,主要做法就是重写andr ...
- 【freemaker】之循环,判断,对象取值
entity: public class Employee { private Integer id; private String name; private Integer age; privat ...