通过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通讯(二)处理多个客户端连接的更多相关文章

  1. Java Socket通讯---网络基础

    java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛 ...

  2. java socket通讯(一) 入门示例

    一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...

  3. java socket通讯

    本来是打算验证java socket是不是单线程操作,也就是一次只能处理一个请求,处理完之后才能继续处理下一个请求.但是在其中又发现了许多问题,在编程的时候需要十分注意,今天就拿出来跟大家分享一下. ...

  4. java socket 通讯

    (转)http://blog.csdn.net/xn4545945/article/details/8098646

  5. Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯

    Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...

  6. Socket网络通讯开发总结之:Java 与 C进行Socket通讯(转)

    先交待一下业务应用背景:服务端:移动交费系统:基于C语言的Unix系统客户端:增值服务系统:基于Java的软件系统通迅协议:采用TCP/IP协议,使用TCP以异步方式接入数据传输:基于Socket流的 ...

  7. Java socket详解(转)

    一:socket通信基本原理. 首先socket 通信是基于TCP/IP 网络层上的一种传送方式,我们通常把TCP和UDP称为传输层. 如上图,在七个层级关系中,我们将的socket属于传输层,其中U ...

  8. Java socket详解

    参考 https://www.jianshu.com/p/cde27461c226 刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白.特抽时间整理一下,详细讲述Ja ...

  9. Java Socket 编程

    1. 背景 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和 ...

随机推荐

  1. 在同步中调用异步方法[.net 4.5]

    using System; using System.Threading; using System.Threading.Tasks; namespace Microsoft.AspNet.Ident ...

  2. Problem A+B(Big Integer)

    /*======================================================================== Problem A+B(Big Integer) ...

  3. wamp下Apache2.4.x局域网访问403的解决办法

    1.我们打开Apache目录\wamp\bin\apache\apache2.4.9下的“conf”文件夹,找到httpd.conf. 2.找到#   onlineoffline tag - don' ...

  4. JQuery Pagenation 知识点整理——(function($){...})应用(20150517)

    首先:(function($){...})为Jquery提供的匿名函数: 代码实例(一) <script type="text/javascript"> (functi ...

  5. NFC会员管理-转载自http://technews.cn/2014/09/13/nfc-sticker/

    基隆的百年名店“李鹄饼店”误用馊水油,客人纷纷上门退货,因退货条件宽松,客人一货两退,造成巨大的损失.为了平息客人的愤怒,店家允许客人凭发 票或商品办理退货,有的客人先用发票退一次钱,再用商品退一次钱 ...

  6. RMAN备份与恢复之参数文件与控制文件

    0   说明 本例是基于备份数据库全库的基础上,还原参数据文件(spfile),控制文件. 1   准备 [oracle@TEST144239 /]$ sqlplus /nolog SQL Produ ...

  7. 【性能测试】性能测试总结<三>

    常见性能测试工具: 性能测试工具,从理论上来讲在性能测试过程中使用到的所有工具都可以称其为性能测试工具,通常分为以下几类: 说明: 服务器端性能测试工具:需要支持产生压力和负载,录制和生成脚本,设置和 ...

  8. 【linux】linux启动过程

  9. 【shell】 for循环

    #!/bin/bash for i in 1,3,4,6 ##有几个数就循环几次 do echo $i done for m in $( cat /root/num.log) ## /root/num ...

  10. redhat编译安装cmake

    将RHEL的yum软件源更换为CentOS的软件源之后,其中的cmake版本太低,为2.6.4版本,编译较新的软件时会提示cmake版本太低,所以有必要编译安装最新版的cmake.   1. 更换yu ...