热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

tcpjava通讯_java网络通信(基于TCP协议可靠通信的socket编程)

packagecn.wang;importjava.io.*;importjava.net.*;publicclassServer{staticintnum1;客户端计数publi

package cn.wang;

import java.io.*;

import java.net.*;

public class Server {

static int num = 1;//客户端计数

public static void main(String[] args) {

// TODO Auto-generated method stub

ServerSocket server = null;

Socket client = null;

while(true) {

try {

server = new ServerSocket(4444);

//绑定端口,监听客户端

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("Error:"+e);

}

try {

client = server.accept();

//与客户端建立连接

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("接受请求失败!");

System.exit(-1);

}

System.out.println("Client["+Server.num+"]登录...");

ServerThread st = new ServerThread(client);

Thread t= new Thread(st);

//监听到客户端,为他创建线程,主程序返回继续监听

t.start();

try {

server.close();

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println("关闭失败!");

}

num++;

}

}

public static class ServerThread implements Runnable{

private Socket client;

public ServerThread(Socket client) {

this.client = client;

}

public void run() {

try {

BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));

//将从客户端接受的信息存放到缓存is中

PrintWriter os = new PrintWriter(client.getOutputStream());

//从socket获取客户端的输出流,通过os向客户端发送消息

BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));

//建立缓存,为后面输入数据做准备

System.out.println("Client:"+is.readLine());

//打印客户端发来的信息

String inputString = sin.readLine();

//从键盘输入信息,存放在inputString中

while(inputString!=null&&inputString.trim().equals("quit")){

os.println(inputString);

//os.println向客户端发送消息,内容是inputString

os.flush();

//刷新输出流,使client马上得到该信息

System.out.println("Server发送的信息为:"+inputString);

//打印服务器向客户端发送的信息

System.out.println("Client发来的信息为:"+is.readLine());

//打印客户端发来的信息

inputString = sin.readLine();

//继续读入数据

}

os.close();//关闭Socket输出流

is.close();//关闭Socket输入流

client.close();//关闭Socket

System.out.println("通信结束!");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}



推荐阅读
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
author-avatar
手机用户2502858405
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有