- 浏览: 467732 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- java基础 (59)
- struts (8)
- spring (8)
- 数据库 (8)
- java 网络编程 (29)
- hibernate (3)
- JavaScript (10)
- 日志管理 (2)
- jsp (4)
- servlet (7)
- xml (4)
- ajax (2)
- web service (4)
- 算法与数据结构 (13)
- java 反射机制 (11)
- java 泛型 (3)
- java I/O (8)
- java 线程 (12)
- JavaEE (6)
- java解惑 (33)
- 工具 (5)
- MyEclipse编程实践 (1)
- OSGI (2)
- 设计模式 (9)
- 正则表达式 (0)
- EJB (3)
- Ubuntu linux (6)
- Android (1)
- web前端 (2)
- 找工作 (1)
- SCA (1)
- maven (1)
- 缓存 (1)
- json (1)
- javamail (1)
- 工作笔记 (2)
最新评论
-
霜花似雪:
博主可以分享一下源码吗?
使用maven构建web项目实例 -
王庆波-行:
很好的demo!
memcache使用实例 -
surpassno:
大写的牛逼
java可视化显示内存使用情况 -
zhulin0504:
怎么访问NetEcho.html页面呀???
applet与servlet的网络通信 -
springdata:
java多线程实例demo源代码下载:http://www.z ...
java多线程例子
1,简化的服务器端程序
先运行此程序,控制台显示Listening....,再在命令行中运行 telnet localhost 8123,显示
Listening....
connection made to bupt(0:0:0:0:0:0:0:1)
Listening....
说明服务器一直在监听,直到有客户端连接为止
2,单连接,只连接一次就关闭服务器
先运行此程序,再在命令行中运行 telnet localhost 1234
如下图所示
2,客户端输入控制服务器端输出
先运行此程序,再在命令行中运行 telnet localhost 1234,输入count后
3,tcp连接传递数据
客户端
服务器端
执行结果:
4,tcp传递对象
客户端
服务器端
5,以上均是单客户端,以下是用多线程实现的多个客户端同时响应的服务器端程序
6,用java中的zip减少发送数据量
服务器端
客户端
执行结果和上面无两样
package tcp; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; //简单化的服务器端程序,用到ServerSocket类,不做任何事,只是在碰到有连接的时候停顿3秒 public class Techo { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(8123); //如果端口已占用会出现异常,例如运行两次此程序第二个会有异常 while(true){ System.out.println("Listening...."); Socket socket = server.accept(); //监听到了的连接,这个调用会阻塞,因此程序会挂起,直到一台客户端计算机连接到它 InetAddress addr = socket.getInetAddress(); //得到客户端的ip地址 System.out.println("connection made to "+addr.getHostName()+"("+addr.getHostAddress()+")"); pause(3000); socket.close(); } } catch (IOException e) { e.printStackTrace(); } } private static void pause(int i) { try { Thread.sleep(i); } catch (InterruptedException e) { e.printStackTrace(); } } }
先运行此程序,控制台显示Listening....,再在命令行中运行 telnet localhost 8123,显示
Listening....
connection made to bupt(0:0:0:0:0:0:0:1)
Listening....
说明服务器一直在监听,直到有客户端连接为止
2,单连接,只连接一次就关闭服务器
package tcp; import java.io.IOException; import java.io.PrintStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; //允许单连接的 public class BeerServer { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(1234); //如果端口已占用会出现异常,例如运行两次此程序第二个会有异常 System.out.println("Listening...."); Socket socket = server.accept(); //监听到了的连接,这个调用会阻塞,因此程序会挂起,直到一台客户端计算机连接到它 InetAddress addr = socket.getInetAddress(); //得到客户端的ip地址 System.out.println("connection made to "+addr.getHostName()+"("+addr.getHostAddress()+")"); server.close();//no more connect,只要建立一个连接后就关闭 // PrintStream不做什么,必须和流联系在一起 PrintStream psstream = new PrintStream(socket.getOutputStream()); for(int i =10;i>=0;i--){ psstream.println(i+" bottles of beer on the wall"); } psstream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
先运行此程序,再在命令行中运行 telnet localhost 1234
如下图所示
2,客户端输入控制服务器端输出
package tcp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; //客户端指定信息来控制服务器输出 public class BeerServer1 { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(1234); //如果端口已占用会出现异常,例如运行两次此程序第二个会有异常 System.out.println("Listening...."); Socket socket = server.accept(); //监听到了的连接,这个调用会阻塞,因此程序会挂起,直到一台客户端计算机连接到它 InetAddress addr = socket.getInetAddress(); //得到客户端的ip地址 System.out.println("connection made to "+addr.getHostName()+"("+addr.getHostAddress()+")"); server.close();//no more connect,只向单个客户端显示消息 // PrintStream不做什么,必须和流联系在一起 PrintStream psstream = new PrintStream(socket.getOutputStream()); // ========== 与上一个不同之处 ============= //ask for count psstream.print("count? "); BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); // read and parse it String line = input.readLine(); psstream.println(" "); int count = Integer.parseInt(line); // ========== 与上一个不同之处 ============= for(int i =count;i>=0;i--){ psstream.println(i+" bottles of beer on the wall"); } psstream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
先运行此程序,再在命令行中运行 telnet localhost 1234,输入count后
3,tcp连接传递数据
客户端
package tcp.data; import java.io.DataInputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; //客户端取出浮点型数据pi值 public class DataClient { public static void main(String[] args) { try { Socket socket = new Socket(args[0],1234); DataInputStream dis = new DataInputStream(socket.getInputStream()); float f = dis.readFloat(); System.out.println("PI="+f); dis.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
服务器端
package tcp.data; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; //一个特定的java服务器端程序能用专门的流传送输入的数据或者对象 public class DataServer { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(1234); //如果端口已占用会出现异常,例如运行两次此程序第二个会有异常 System.out.println("Listening...."); Socket socket = server.accept(); //监听到了的连接,这个调用会阻塞,因此程序会挂起,直到一台客户端计算机连接到它 DataOutputStream dsstream = new DataOutputStream(socket.getOutputStream()); dsstream.writeFloat(3.14159265f); dsstream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
执行结果:
4,tcp传递对象
客户端
package tcp.obj; import java.io.IOException; import java.io.ObjectInputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.List; //一个特定的java客户端程序,从服务器端读对象 public class ObjClient { public static void main(String[] args) throws ClassNotFoundException { try { Socket socket = new Socket(args[0], 1234); ObjectInputStream ois = new ObjectInputStream(socket .getInputStream()); List hash = (List) ois.readObject(); System.out.println(hash); ois.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
服务器端
package tcp.obj; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; //服务器端,对象传递数据 public class ObjServer { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(1234); //如果端口已占用会出现异常,例如运行两次此程序第二个会有异常 List<String> list = new ArrayList<String>(); list.add("first"); list.add("second"); while(true){ //一直在监听 System.out.println("Listening...."); Socket socket = server.accept(); //监听到了的连接,这个调用会阻塞,因此程序会挂起,直到一台客户端计算机连接到它 ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); oos.writeObject(list); oos.close(); socket.close(); } } catch (IOException e) { e.printStackTrace(); } } }
5,以上均是单客户端,以下是用多线程实现的多个客户端同时响应的服务器端程序
package tcp.multiclient; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; //使用线程,允许服务器一次处理多个客户端的请求 public class MTServer extends Thread { //或implements Runnable Socket client; public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(1234); System.out.println("Listening...."); while (true) { // 一直监听,每监听到一个连接,启动一个线程 ,可以考虑用线程池???? Socket socket = server.accept(); System.out.println("Connected...."); new MTServer(socket).start(); // 执行run方法 // new Thread(new MTServer(socket)).start(); 如果是实现runnable接口 } } public MTServer(Socket client) { super(); this.client = client; } public void run() { try { PrintStream psstream = new PrintStream(client.getOutputStream()); for (int i = 10; i >= 0; i--) { psstream.println(i + " bottles of beer on the wall"); } psstream.close(); client.close(); } catch (IOException e) { e.printStackTrace(); } } }
6,用java中的zip减少发送数据量
服务器端
package tcp.zipUnzip; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.zip.GZIPInputStream; //使用java的压缩类减少数据量,服务器端 public class CompRcv { public static void main(String[] args) throws NumberFormatException, IOException { ServerSocket server = new ServerSocket(Integer.parseInt(args[0])); System.out.println("Listening...."); Socket socket = server.accept(); [color=red]GZIPInputStream zip = new GZIPInputStream(socket.getInputStream());[/color] while(true){ int c; c = zip.read(); if(c==-1)break; System.out.println((char)c); //中文读不出来 } } }
客户端
package tcp.zipUnzip; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.util.zip.GZIPOutputStream; //客户端发送压缩文件到服务器,参数为主机名,端口号,发送的文件 public class CompSend { public static void main(String[] args) throws NumberFormatException, UnknownHostException, IOException { Socket socket = new Socket(args[0],Integer.parseInt(args[1])); [color=red]GZIPOutputStream zip = new GZIPOutputStream(socket.getOutputStream());[/color] String line; BufferedReader reader = new BufferedReader(new FileReader(args[2])); while(true){ line = reader.readLine(); if(line==null)break; line = line+"\n"; zip.write(line.getBytes(),0,line.length()); } zip.finish(); zip.close(); socket.close(); } }
执行结果和上面无两样
发表评论
-
计算机网络知识
2011-06-01 16:19 792一个http请求的详细过程 我们来看当我们在浏览器输入htt ... -
java udp socket实例
2010-12-06 12:28 7119客户端: package udp; import jav ... -
线程池实现tcp socket
2010-12-01 17:23 2879前面的程序,当一个客户端请求到来时,服务器端就会临时性的创建一 ... -
tcp socket实例(改进)
2010-12-01 16:16 1592上一篇的程序服务器端只能接受一个客户端请求,本篇改为模拟多客户 ... -
java tcp socket实例
2010-12-01 13:44 1625网络编程的基本模型就是客户端到服务器端模型,一段必须提供一个固 ... -
telnet协议(转)
2010-10-14 17:17 1138我们知道Telnet服务器软 ... -
whois协议(转)
2010-10-14 14:28 1360当我们预备建立一个Web站点,就必须向域名登记机构申请一个In ... -
java 网络协议(一)Tcp多线程服务器端编程
2010-10-14 11:33 54851,通用服务器代码: package multiThread; ... -
java 网络协议(一)UDP
2010-10-14 09:24 1475UDP测试程序,无需建立连接 package udp; ... -
java 网络协议(一)InetAddress和Socket(含源码)
2010-10-14 08:24 18821,ip地址和主机名互换 package getip; ... -
ftp协议2(转)
2010-10-12 16:26 965FTP协议工作原理 FTP有 ... -
ftp协议(转)
2010-10-12 16:21 1266ftp协议 FTP协议将使用两 ... -
SMTP服务协议(转)
2010-10-11 15:31 1245SMTP服务概述 鉴于本课程的默认读者群是那些对Inter ... -
利用socket发送接收邮件(转)
2010-10-11 15:18 4188这是在网上摘的,执行接收邮件出现:530 Authentica ... -
jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)
2010-09-21 10:13 1430本例向用户通过参数指定的主机端口发送一段请求报文,然后读取和打 ... -
jdk6.0从入门到精通-----chapter6--http
2010-09-14 16:32 944用httpconnection进行文件下载,建立一般的jav ... -
java自学===Filter类的应用,验证用户
2010-09-14 14:37 938Filter类 package com; import ... -
java自学===Filter类的应用,网站数量统计
2010-09-14 12:31 1940package filterStatistic; imp ... -
jdk6.0从入门到精通-----chapter5网络编程 udp套接字
2010-09-12 13:46 1161用到的主要类DatagramPacket,DatagramSo ... -
jdk6.0从入门到精通-----chapter5网络编程 tcp连接池
2010-09-10 18:07 984package pool; import java.ne ...
相关推荐
Java网络编程是构建分布式应用程序的关键技术之一,TCP(Transmission Control Protocol)协议作为互联网上最基础的传输协议,为两台计算机之间提供可靠的数据传输服务。在这个聊天室项目中,我们将探讨如何利用Java...
在Java网络编程中,TCP(Transmission Control Protocol)协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP提供了一种可靠的数据传输服务,确保数据的正确顺序和完整性,非常适合文件传输。本教程将...
Java网络通信是一个重要的主题,特别是在开发分布式系统和网络应用程序时。TCP(传输控制协议)是互联网上广泛使用的面向连接的、可靠的传输层协议。在这个Java项目中,我们专注于使用TCP进行网络通信,提供了完整的...
【Java版聊天软件基于TCP协议实现】 在计算机网络通信领域,TCP(Transmission Control Protocol)是一种面向...此外,对于初学者,源码也是一个很好的学习资源,可以加深对Java网络编程的理解,进一步提升编程技能。
Java网络协议源码是深入理解Java网络编程的关键资源,它涵盖了网络通信中各种协议的实现细节。这份资料可能包括了TCP/IP、HTTP、FTP等常用网络协议的Java源代码实现,对于开发者来说,是一个深入了解网络协议工作...
后来发展出了Modbus TCP/IP,将Modbus协议与TCP/IP网络协议栈结合,提高了其在网络环境下的应用能力,使得设备能够通过以太网进行通信。 2. **ModbusTCP**: ModbusTCP是Modbus协议的网络版本,它使用TCP/IP协议来...
在IT行业中,TCP(传输控制协议)是一种广泛用于网络通信的协议,它是互联网协议栈(TCP/IP协议族)的一部分。TCP提供了一种面向连接、可靠的、基于字节流的通信服务,确保数据能够准确无误地从一个端点传送到另一个...
在IT领域,网络通信是核心部分之一,而IP/TCP协议是互联网协议栈中的关键层次。本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP...
在IT行业中,TCP(传输控制协议)是一种广泛用于互联网通信的协议,因为它提供了可靠的、面向连接的数据传输服务。本文将详细探讨使用Java编程语言实现TCP协议验证的相关知识点,包括TCP的特性、可靠传输机制、丢包...
Java编程语言在工业自动化和设备通信领域中广泛应用于实现Modbus通信协议,这是一种标准化的通信协议,用于设备间的数据交换。本项目提供了基于Modbus RTU(远程终端单元)和TCP(传输控制协议)的通信源码,适用于...
Java ModbusTCP通信是工业自动化领域中常见的通信协议,它基于TCP/IP网络协议,用于设备间的通信。在Java中实现ModbusTCP通信,主要是通过创建Socket连接,与Modbus服务器进行数据交换。以下是对这个主题的详细解释...
在IT领域,TCP(传输控制协议)是一种广泛用于网络通信的协议,因为它提供了一种可靠的、面向连接的数据传输服务。本文将深入探讨如何使用Java来实现一个基于TCP协议的服务器,我们将围绕`TCPSocketServer.java`源...
Modbus 协议是一项应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,包括 ASCII、RTU、TCP 三种报文类型。 Modbus TCP 数据帧由 MBAP 和 PDU 两部分组成。MBAP 是报文头,长度为...
根据提供的信息,“Java网络协议内幕”这本书主要探讨了Java在处理网络通信时涉及的各种协议和技术。这是一本针对具有一定Java编程经验的开发人员所撰写的书籍,旨在深入讲解Java在网络应用方面的实现细节与最佳实践...
### ModbusTCP协议Java实现详解 #### 一、概述 Modbus协议是一种广泛应用于工业自动化领域的通信协议,它主要用于在设备之间进行数据交换。随着工业网络的发展,ModbusTCP/IP应运而生,该协议结合了Modbus的功能与...
Java网络开发中,TCP协议是基础且至关重要的部分。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java中,通过Socket类和ServerSocket类,开发者可以实现基于TCP的网络通信。 TCP...
在IT行业中,网络通信是至关重要的一个领域,TCP(Transmission Control Protocol...综上所述,"TCP_Java.rar"提供了关于Java实现TCP协议的基础知识和实践经验,对于深入理解TCP协议和Java网络编程有着重要的学习价值。
在本项目中,我们探讨的是一个使用Java(J2SE)编写的简单多用户聊天系统,该系统基于TCP协议。TCP(传输控制协议)是一种面向...总的来说,这个简单的多用户聊天系统是学习Java网络编程和多线程处理的绝佳实践项目。