java中的Socket编程

2023-11-09

基于Socket的java网络编程

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端成为一个socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个socket有一个IP地址和一个端口号唯一的确定。

但是,socket所支持的协议类也不仅仅是TCP/IP一种。在java环境下,socket编程主要是指基于TCP/IP协议的网络编程。

2.Socket通讯的过程

         Server端Listen(监听)某一个端口是否有连接请求,Client端向server端发出connect(连接)请求,server端向client端发回Accept(接收)消息。一个连接就建立起来了。Server端和client端都可以通过send,write等方法与对方通信。

Socket工作过程包含四个基本步骤:

(1).创建socket;

(2).打开连接到Socket的输入/输出流;

(3).按照一定的协议对Socket进行读/写操作;

(4).关闭Socket

Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务器端。


客户端代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClient {

	
	public static void main(String[] args) {
		try {
			//创建socket
			Socket socket=new Socket("127.0.0.1", 4700);
			
			//由系统标准输入设备构建bufferedreader对象
			BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
			
			//由socket对象得到输出流,并构造printwriter对象
			PrintWriter os=new PrintWriter(socket.getOutputStream());
			
			//由socket对象得到输入流,并构建相应的bufferreader对象
			BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			
			String readline;
			readline=sin.readLine();
			
			while(!readline.equals("bye"))
			{
				//将系统标准输入读入的字符串输出到server
				os.println(readline);
				
				os.flush();
				System.out.println("Client:"+readline);
				System.out.println("Server:"+is.readLine());
				readline=sin.readLine();
				
			}
			
			os.close();
			is.close();
			socket.close();
			
			
		} catch (UnknownHostException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
		
			e.printStackTrace();
		}
	}
	
}


服务器端代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class SocketServer {

	public static void main(String[] args) {
		
		ServerSocket server=null;
		
		try {
			server=new ServerSocket(4700);
			
			Socket socket=null;
			
			socket=server.accept();
			
			String line;
			BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			PrintWriter os=new PrintWriter(socket.getOutputStream());
			BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
			
			System.out.println("Client:"+is.readLine());
			line=sin.readLine();
			
			while(!line.equals("bye"))
			{
				os.println(line);
				os.flush();
				System.out.println("Server:"+line);
				System.out.println("Client:"+is.readLine());
				line=sin.readLine();
				
			}
			os.close();
			is.close();
			socket.close();
			server.close();
			
		} catch (IOException e) {
			
			e.printStackTrace();
			
		}
		
	}
	
	
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中的Socket编程 的相关文章

随机推荐

  • 日志框架:slf4j、log4j和logback的基本使用

    slf4j是日志框架的标准 即通用接口 实现了日志框架一些通用的api 而log4j和logback是众多日志框架中的几种 log4j和logback可以单独的使用 也可以绑定slf4j一起使用 1 单独使用时分别调用框架自己的方法来输出日
  • Multi-level Attention Networks for Visual Question Answering阅读笔记

    Multi level Attention Networks 这个模型可以同时提取高级语义信息和空间信息 模型框架如下所示 该模型分为三个部分 分别是Semantic Attention Context aware Visual Atten
  • 云计算的快速发展,未来主要的发展趋势是什么?

    1 云计算的分工将会变得更加细化 随着云计算产业生态链不断完善 行业分工逐渐细化 在未来年 云计算的分工更加细化 行业云将成为云计算领域的发展热点 2 Iaas将迎来更大的降价风潮 万物互联对云计算带来更大的需求 在行业竞争和规模效应的驱动
  • 张飞硬件第四部(二)

    文章目录 第一章 项目背景 第二章 项目条件 第三章 项目实现 第一节 涉及知识点 1 1 三级管的放大作用 1 1 1 原理 1 1 2 正反馈与负反馈 1 1 3 共模干扰与差模干扰 1 1 4 差模放大 1 1 5 运算放大器 第一章
  • ESP8266EX使用SDK开发串口调试乱码

    目录 问题如图所示 问题分析 问题解决 问题如图所示 问题分析 有输出信号 说明有数据产生 可能原因 波特率不匹配 时钟频率不对 问题解决 不断调整串口调试助手的波特率9600 115200 不管用 把ESP8266的默认波特率改为9600
  • Maven使用指南(超详细)

    Maven高级 目标 理解并实现分模块开发 能够使用聚合工程快速构建项目 能够使用继承简化项目配置 能够根据需求配置生成 开发 测试环境 并在各个环境间切换运行 了解Maven的私服 1 分模块开发 1 1 分模块开发设计 1 按照功能拆分
  • 关于微信公众号获取token值和模板推送接口对接问题

    今天做了一个关于微信的接口 由于以前没有接触过关于微信的问题 现在碰到了查了很多资料 下面总结一下 1 获取token值 微信获取公众号token值需要公众号的appid和secret 这两个值是微信提供的 是不会变的 获取token值地址
  • 动力节点Java17最新零基础视频-第三章 Java基础语法

    标识符 掌握 什么是标识符 在Java中 标识符是用来给变量 方法 类和包等命名的字符序列 标识符由字母 数字 下划线和美元符号组成 但是第一个字符必须是字母 下划线或美元符号 标识符不能包含空格或其他特殊字符 也不能与Java关键字相同
  • gojs 节点(node)/线(link)的动态添加及样式(nodeTemplate / linkTemplateMap)

    1 创建节点及节点样式 节点样式可以是多种的 你阔以 可以 给不同的节点设置不同的样式 或者是直接设置一个通用的样式 比如 var CreateNode key getNextKey 设置key的方法 每个节点最好是有自己独立的key ca
  • 使用vector迭代器实现二分查找

    vector二分查找 include stdafx h include
  • macOS 视频格式转换:ffmpeg + shell 脚本【最优方案】【免费 + 高效】

    效果完美 开始转换 成功输出 ffmpeg 下载 github 开源下载 下载地址 https ffmpeg org download html shell 脚本 你的用户名 替换成你得自己的对应路劲 比如你下载的 ffmpeg 躲在路劲
  • windows的磁盘操作之七——获取当前所有的物理磁盘号

    有了前几节的基础后 本节给出一个更复杂但却非常实用的例子 很多情况下 我们想知道当前系统下安装了多少块磁盘 他们的物理驱动器号都是多少 每一块磁盘上有多少个分区 分区号怎么分布 每个分区大小是多少 这就类似于我们打开windows 的磁盘管
  • c++的工程文件的编译顺序

    以前一直以为 vs在编译c 文件时候是从头文件开始编译的 而每个头文件对应的源文件只是头文件定义中的一些实现而已 源文件不参与编译 今天经过同学指点并实践之后才发现 其实不是这样的 从中受益颇多 c 编译的时候实际上只编译源文件 而不编译头
  • 416. 分割等和子集

    题目描述 给你一个 只包含正整数 的 非空 数组 nums 请你判断是否可以将这个数组分割成两个子集 使得两个子集的元素和相等 示例 1 输入 nums 1 5 11 5 输出 true 解释 数组可以分割成 1 5 5 和 11 示例 2
  • nginx实战总结-request_time和upstream_response_time详解

    一 前言 这个主要是日志模块的延伸 这两个参数 在实战中非常重要 因此提出来单独说 二 图解 从上图中得出以下结论 打印日志是在最后一个步骤 也就是说整套请求完毕后 进行打印 请求的整套时间线 1 客户端 request gt nginx
  • 最大流解决医生排班问题

    目录 问题描述 场景建模 Ford Fulkerson方法 Edmonds karp算法 Dinic算法 问题描述 一个医院有n名医生 现有k个公共假期需要安排医生值班 每一个公共假期由若干天 假日 组成 第j个假期包含的假日用 Dj表示
  • Python接口自动化测试之文件上传

    在接口测试中 经常会涉及到文件上传 文件上传一般包含的文件是图片 视频以及如csv excel 记事本等文件 它的请求头中Content Type对应的value值是multipart form data 这里依据实际的案例来说明文件上传的
  • Makefile 神奇:驾驭编译的力量

    一 make和Makefile 当谈到 make 和 Makefile 时 通常是指构建工具 make 和用于描述编译和构建过程的文本文件 Makefile make 是一个在类Unix系统中广泛使用的构建工具 它基于文件的时间戳比较 只编
  • 【Vue】生命周期回调函数

    生命周期 又名 生命周期回调函数 生命周期函数 生命周期钩子 程序员间沟通常称生命周期钩子 是什么 Vue在关键时刻帮我们调用的一些特殊名称的函数 生命周期函数的名字不可更改 但是函数的具体内容是程序员根据需求编写的 生命周期函数中的 th
  • java中的Socket编程

    基于Socket的java网络编程 网络上的两个程序通过一个双向的通讯连接实现数据的交换 这个双向链路的一端成为一个socket Socket通常用来实现客户方和服务方的连接 Socket是TCP IP协议的一个十分流行的编程界面 一个so