热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Java网络编程之TCP通信完整代码示例

这篇文章主要介绍了Java网络编程之TCP通信完整代码示例,具有一定借鉴价值,需要的朋友可以了解下。

一、概述

  Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信。Socket类的方法会建立和销毁连接,设置各种Socket选项。

  ServerSocket类是Java执行服务器端操作的基础类,该类运行于服务器,监听入站TCP连接,每个socket服务器监听服务器的某个端口,当远程主机的客户端尝试连接此端口时,服务器就被唤醒,并返回一个表示两台主机之间socket的正常Socket对象。

二、什么是TCP?  

  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信分为客户端和服务器端,对应的对象是分别是Socket和ServerSocket。

  当一台计算机需要与另一台远程计算机连接时,TCP协议会让他们建立一个连接:用于发送和接收数据的虚拟链路。TCP协议负责收集信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确的还原。为了保证数据包在传送中准确无误,TCP使用了重发机制:当一个通信实体发送一个消息给另一个通信实体后需要收到另一个实体的确认信息,如果没有收到确认信息,则会再次重发刚才发送的信息。

三、TCP通信

  1、构造函数

  Socket类实现客户端套接字,通过构造函数可以指定希望连接的主机和端口。主机可以指定为InetAddress或String,端口始终指定为0到65535之间的int值。

Socket s=new Socket("127.0.0.1", 10001);//创建一个流套接字并将其连接到指定主机上的指定端口号

ServerSocket类实现服务器套接字。服务器套接字等待请求通过网络传入,它基于该请求执行某些操作,然后向请求者返回结果。

ServerSocket ss=new ServerSocket(10001);//创建绑定到特定端口的服务器套接字

2、例子:TCP文件复制

  客户端:

public class ClientDemo
{
	public static void main(String[] args) throws UnknownHostException, IOException
	  {
		Socket s=new Socket("127.0.0.1", 10004);
		BufferedReader buf = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\1.txt"));
		String line=null;
		/*PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    while((line=buf.readLine())!=null)
    {
      out.println(line);
    }
    */
		BufferedWriter out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		while((line=buf.readLine())!=null)
		    {
			out.write(line);
			out.newLine();
			out.flush();
		}
		s.shutdownOutput();
		BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String str=in.readLine();
		System.out.println(str);
		s.close();
		buf.close();
	}
}

服务器端:

public class ServerDemo
{
	public static void main(String[] args) throws IOException
	  {
		ServerSocket ss=new ServerSocket(10004);
		Socket s=ss.accept();
		BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		/*PrintWriter buf=new PrintWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\2.txt"),true);
    while((line=in.readLine())!=null)
    {  
      buf.println(line);
    }*/
		BufferedWriter buf=new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\2.txt"));
		while((line=in.readLine())!=null)
		    {
			buf.write(line);
			buf.newLine();
			buf.flush();
		}
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		out.println("传输成功!");
		ss.close();
		buf.close();
	}
}

四、Socket在浏览上的应用

  我们可以在Eclipse中编写服务器端,然后利用浏览器进行访问。

  eg、服务器端代码为:

public class SocketServer
{
  public static void main(String[] args) throws IOException 
  {
    ServerSocket server=new ServerSocket(11000);
    Socket client=server.accept();
    PrintWriter out=new PrintWriter(client.getOutputStream(),true);
    out.println("你好!");
    server.close();
  }
}

然后打开IE浏览器,在地址中输入http://192.168.1.120:11000/(192.168.1.120为本机IP地址),结果显示为

在正常的应用中,浏览器是向Tomacat服务器发出请求,以得到网页图片等资源。而tomca就是用Java写的服务器端软件。

  现在我们编写服务器端为:

public class SocketServer
{
  public static void main(String[] args) throws IOException 
  {
    ServerSocket server=new ServerSocket(11000);
    Socket client=server.accept();
    PrintWriter out=new PrintWriter(client.getOutputStream(),true);
    BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
    String line=null;
    while((line=in.readLine())!=null)
      System.out.println(line);
    out.println("你好!");
    server.close();
  }
}

然后在利用浏览器访问,可以看到浏览器(客户端)发给服务器端的请求头数据为:

利用上述原理,我们可以自己编写类似IE的浏览器端(客户端)软件。首先在Tomcat的安装目录C:\apache-tomcat-7.0.62\webapps\myweb中添加一个demo.html资源,然后编写客户端,代码如下:

public class ClientDemo
{
	public static void main(String[] args) throws UnknownHostException, IOException
	  {
		Socket s=new Socket("192.168.1.120",8080);
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		//将请求头发给服务器
		out.println("GET /myweb/demo.html HTTP/1.1");
		out.println("Accept:*/*");
		out.println("Host: 192.168.1.120:11000");
		out.println("Connection: Keep-Alive");
		//输出空行,此步骤不可少
		out.println();
		BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		//返回服务器的响应文件
		while((line=in.readLine())!=null)
		    {
			System.out.println(line);
		}
		s.close();
	}
}

接下来,启动Tomcat。即双击C:\apache-tomcat-7.0.62\bin中startup.bat文件。然后运行上述客户端代码,此时可以看到Tomacat返回的响应数据:

总结

以上就是本文关于Java网络编程之TCP通信完整代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Java网络编程基础篇之单向通信

Java多线程编程实现socket通信示例代码

Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


推荐阅读
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
author-avatar
Fabio_Ho_275
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有