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 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和 ...
随机推荐
- asp.net中virtual和abstract的区别
这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...
- ORA-01109:数据库未打开
ORA-01109:数据库未打开 在此之前做了这样一操作,在plsql创建了2表空间,由于装的是oracle精简版所以创建表空间大小超过4G就不能创建,然后我就手动把表空间给删除了,回收站也给删了,问 ...
- R(五): R常用函数
工作笔记记录,会持续更新.... 目录: apply tapply lapply sapply merge substr.substring.strsplit.unlist.paste.paste0. ...
- shopex用户登陆错误提示在nginx下乱码问题
http://www.test.cn/passport-aHR0cDosLHd3dy54eTAwNy5jbixwYXNzcG9ydC1hSFIwY0Rvc0xIZDNkeTU0ZVRBd055NWpi ...
- 【jmeter】JMeter处理Cookie与Session
有些网站保存信息是使用Cookie,有些则是使用Session.对于这两种方式,JMeter都给予一定的支持. 1.Cookie 添加方式:线程组-配置元件-HTTP Cookie 管理器,如下图: ...
- 【Executor】配置ThreadPoolExecutor
来自为知笔记(Wiz) 附件列表
- Windows2012修改光驱盘符
1.输入diskmgmt.msc打开磁盘管理器 2.找到需要修改的盘符,右键点击修改盘符
- HDMI的CEC是如何控制外围互联设备的
1. HDMI CEC算是一个相当庞大的系统,想了解还要从HDMI接口信号啊.物理地址啊.逻辑地址啊等等HDMI基础的东西说起. 2. 不过可以简单的这么理解,在HDMI CEC最小系统里,所有通过H ...
- Orcale(一)概念
一 . 基本概念 : 1. orcaleinstanceclient : orcale的客户端 ( 1. 中文乱码问题 : NLS_LANG=SIMPLIFIED CHINESE_CHINA.Z ...
- /proc/sys/net/ipv4/
/proc/sys/net/ipv4/icmp_timeexceed_rate这个在traceroute时导致著名的"Solaris middle star".这个文件控制发送IC ...