通过Socket实现TCP编程

Android 基于TCP的 Socket 编程实现(结合 okio) 两个进程如果要进行通讯最基本的一个前提就是能够唯一的标识一个进程,在本地进程通讯中我们可以使用 PID 来唯一标识一个进程,但 PID 只在本地是唯一的,网络中两个进程 PID 冲突几率很大,这时我们就需要通过其他手段来唯一标识网络中的进程了,我们知道 IP 层的 ip 地址可以唯一标示主机,而 TCP 层协议和端口号结合就可以唯一标示主机的一个进程了。 阅读详情

基于Tcp的Socket通信原理
Java socket通信通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。socket 开发分客户端与服务端,服务端ServerSocket开启服务监听某一端口,客户端socket向此服务器的这个端口发出请求,成功则会建立会话,形成通道,这个通道若不做其它操作会一直存在,就是所谓的长连接了,这时服务端与客户端可以通过此通道进行即时通信.

通信模型:
这里写图片描述

服务器端的实现:

package Socket;

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

/*
 * 
 * 服务器端
 * 基于TCP协议的Socket通信
 * 
 * */
public class Server {

    public static void main(String[] args) throws IOException {
        // 1.创建ServerSocket对象,绑定监听端口,并监听此端口
        ServerSocket serverSocket = new ServerSocket(8880);
        // 2.通过accept方法监听客户端请求,等待客户端的连接
        Socket socket = socket = serverSocket.accept();
        //3.连接建立后,通过输入流读取客户端发送的请求信息
        InputStream is = socket.getInputStream();//字节输入流
        InputStreamReader isr = new InputStreamReader(is);//转为字符流
        BufferedReader br = new BufferedReader(isr);//添加缓冲
        String info = null;
        while((info = br.readLine())!= null) {
            System.out.println("服务器端收到的客户端传来的请求内容为:"+info);
        }
        //4.通过输出流向客户端发出响应信息
        OutputStream os = socket.getOutputStream();
        PrintWriter print = new PrintWriter(os);
        print.write("欢迎您!");
        print.flush();
        socket.shutdownOutput();
        // 5.关闭相关资源
        serverSocket.close();
    }

}

客户端的实现

package Socket;

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

/*
 * 
 * 客户端
 * 基于TCP协议的Socket通信
 * 
 * */
class Client {

    public static void main(String[] args) throws UnknownHostException,
            IOException {
        // 1.创建Socket对象,指明要连接的服务器地址和端口号
        Socket socket = new Socket("localhost", 8888);
        // 2.连接建立后,通过输出流向服务器端发送请求
        OutputStream os = socket.getOutputStream();// 字节输出流
        PrintWriter print = new PrintWriter(os); // 将字节输出流包装为打印输出流
        print.write("用户名:admin; 密码:123");
        print.flush();
        socket.shutdownOutput();
        // 3.通过输入流读取服务器端响应的信息
        InputStream is = socket.getInputStream();// 字节输入流
        InputStreamReader isr = new InputStreamReader(is);// 转为字符流
        BufferedReader br = new BufferedReader(isr);// 添加缓冲
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("客户端收到的服务器端传来的响应内容为:" + info);
        }
        // 4.关闭相关资源
        socket.close();
    }

}

应用多线程来实现服务器与多线程之间的通信
步骤如下:
1、服务器端创建ServerSocket,循环调用accept()等待客户端链接
2、客户端创建一个Socket并请求和服务器端链接
3、服务器端接受客户端请求,创建socekt与该客户端建立专线链接
4、建立链接的socket在一个单独的线程上对话
5、服务器继续等待新的链接

服务器端多线程的实现

package Socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerThread extends Thread {
    Socket socket  = null;
    ServerThread(Socket socket ) {
        this.socket  = socket;
    }
    public void run(){
        //3.连接建立后,通过输入流读取客户端发送的请求信息
        try {
            InputStream is = socket.getInputStream();//字节输入流
            InputStreamReader isr = new InputStreamReader(is);//转为字符流
            BufferedReader br = new BufferedReader(isr);//添加缓冲
            String info = null;
            while((info = br.readLine())!= null) {
                System.out.println("服务器端收到的客户端传来的请求内容为:"+info);
            }
            //4.通过输出流向客户端发出响应信息
            OutputStream os = socket.getOutputStream();
            PrintWriter print = new PrintWriter(os);
            print.write("欢迎您!");
            print.flush();
            socket.shutdownOutput();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

服务器端的实现

package Socket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * 
 * 服务器端
 * 基于TCP协议的Socket通信
 * 
 * */
public class Server {

    public static void main(String[] args) throws IOException {
        // 1.创建ServerSocket对象,绑定监听端口,并监听此端口
        ServerSocket serverSocket = new ServerSocket(8880);
        // 2.通过accept方法监听客户端请求,等待客户端的连接
        Socket socket = null;
        int count = 0;
        while (true) {
            socket = serverSocket.accept();
            Thread thread = new ServerThread(socket);
            thread.start();
            count++;
            System.out.println("客户端的数量为:"+count);
        }
        // 5.关闭相关资源
        //serverSocket.close();
    }

}

客户端的实现
与上述无异

package Socket;

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

/*
 * 
 * 客户端
 * 基于TCP协议的Socket通信
 * 
 * */
class Client {

    public static void main(String[] args) throws UnknownHostException,
            IOException {
        // 1.创建Socket对象,指明要连接的服务器地址和端口号
        Socket socket = new Socket("localhost", 8888);
        // 2.连接建立后,通过输出流向服务器端发送请求
        OutputStream os = socket.getOutputStream();// 字节输出流
        PrintWriter print = new PrintWriter(os); // 将字节输出流包装为打印输出流
        print.write("用户名:admin; 密码:123");
        print.flush();
        socket.shutdownOutput();
        // 3.通过输入流读取服务器端响应的信息
        InputStream is = socket.getInputStream();// 字节输入流
        InputStreamReader isr = new InputStreamReader(is);// 转为字符流
        BufferedReader br = new BufferedReader(isr);// 添加缓冲
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("客户端收到的服务器端传来的响应内容为:" + info);
        }
        // 4.关闭相关资源
        socket.close();
    }

}
C语言通过socket编程实现TCP通信 服务端客户端通信例子:socket tcp 通信1,socket tcp通信2,udp使用讲解,socket udp通信例子 1. TCP/IP协议 叫做传输控制/网际协议,又叫网络通信协议。实际上,它包含上百个功能的协议,如ICMP(互联网控制信息协议)、FTP(文件传输协议)、UDP(用户数据包协议)、ARP(地址解析协议)等。TCP负责发现传输的问题,一旦有问题就会发出重传信号,直到所... 阅读详情

相关推荐

用matlab实现tcpip服务端和客户端的简单例子,代码不超过1页有注释

Provides an example Server / Client written in MATLAB that utilises the ability to call Java inline to perform message communication using TCP/IP.

Socket到底是什么?

学习java网络编程一段时间后,突然被问到socket是什么?回答不上来,感觉很尴尬,于是赶紧是查阅资料。 网络由下往上分为 物理层 、数据链路层 、 网络层 、 传输层 、 会话层 、 表现层 和 应用层。 通过初步了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP协议是应用层协议,主要解决如

minGW_Lee on the way 3万+

Socket tcp编程示例 实现类似SSH功能(但是不使用SSH),Windows客户端,Linux服务器端.zip

Socket编程示例 实现类似SSH功能(但是不使用SSH),Windows客户端,Linux服务器端.zip

计算机网络——SOCKET、TCP、HTTP之间的区别与联系

计算机网络——SOCKET、TCP、HTTP之间的区别与联系

NRWHF的博客 7622

解决vscode无法运行npm命令的问题(cmd可行)

Powershell以及vscode中npm命令使用不了

无痕坚守本心的博客 2749

CAPL实战:从零构建HEX文件解析器,赋能UDS刷写

本文详细介绍了如何使用CAPL从零构建HEX文件解析器,以支持UDS刷写操作。通过解析HEX文件格式、设计状态机、优化数据结构与算法,实现高效准确的固件数据处理,并提供了与UDS刷写流程对接的工程化实践建议。

weixin_28726391的博客 443

java socket的超时设置

1、socket连接建立超时 socket连接建立是基于TCP的连接建立过程。TCP的连接需要通过3次握手报文来完成,开始建立TCP连接时需要发送同步SYN报文,然后等待确认报文SYN+ACK,最后再发送确认报文ACK。TCP连接的关闭通过4次挥手来完成,主动关闭TCP连接的一方发送FIN报文,等待对方的确认报文;被动关闭的一方也发送FIN报文,然等待确认报文。 正在等待TCP连接请求的一端有

yutel的专栏 7743

【Unity】YooAsset与HybridCLR:高效资源管理与代码热更的黄金组合

本文深入探讨了Unity开发中YooAsset与HybridCLR的组合应用,为需要长期运营的项目提供了完整的资源与代码热更新解决方案。YooAsset作为高效的资源管理框架,简化了AssetBundle的打包、加载与热更流程;而HybridCLR则攻克了IL2CPP模式下C#代码无法热更的难题。两者结合,实现了从资源到逻辑的平滑在线更新,极大提升了开发迭代与线上维护的效率。

weixin_29006701的博客 279

简单的TCP网络程序

首先我们先来看一下用到的socket API,这些函数都在sys/socket.h中。 socket(): int socket(int domain,int type,int protocol); - socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符; - 应用程序可以像读写文件一样用read/write在网络上收发数据; - 如果socke...

tao934798774的博客 1206

从单应矩阵到实际距离:Apriltag测距完整实现指南

本文提供了基于Apriltag实现高精度视觉测距与姿态估计的完整指南。详细阐述了从相机标定、单应矩阵分解到欧拉角与距离计算的完整流程,并深入探讨了四个解的歧义选择、工程实践中的滤波优化与多Tag融合等关键问题,旨在帮助开发者在机器人、AR等应用中实现稳定可靠的距离检测与姿态估计。

n7o8p的博客 559

维护测试监控LLM应用

LangFuse: 开源 + SaaS(免费/付费),LangSmith 平替,可集成 LangChain 也可直接对接 OpenAI API;LangSmith: LangChain 的官方平台,SaaS 服务(免费/付费),非开源,企业版支持私有部署;调试 Prompt 的 Playground测试/验证系统的相关指标数据集管理各种指标监控与统计:访问量、响应时长、Token 费等等。

SunnyRivers 1780

基于MFC实现TCP的socket编程

一.实验目的 了解Socket通信原理,实现以太网双节点通讯。 二.实验要求 了解三次握手的原理。 编程实现以太网双节点通讯。 了解端口与IP的关系和差异。 三.实验原理 基于TCP(面向连接)的socket编程,分为客户端和服务器端。 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send/recv) (4)关闭套接字 服务器端的流程如下: (1)创建套接字(socket) (2)将套接字绑定到一个本地地址和端口上(bind)

诶你爱我吗的博客 2529

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1787

socket编程之实现一个简单的TCP通信

一、理解socket1、socket即为套接字,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket。 2、在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket组成的socket pair就唯一标识一个连接。 3、socket本身就有“插座”的意思,因此用来形容

YANG 9万+

【ComfyUI】Flux 图像扩展

本文介绍了一个基于Flux扩图技术的ComfyUI工作流,能够智能扩展图像尺寸并保持内容连贯性。该流程通过扩散模型与条件编码的结合,对图像边缘进行语义填充生成,适用于艺术创作、海报设计等场景。工作流包含图像加载、外扩填充、文本编码、扩散采样等核心节点,采用Flux1-fill-dev等专业模型确保生成质量。演示效果显示,系统能自然延伸原图内容,保持风格统一。该技术可广泛应用于插画扩展、摄影增强、游戏场景构建等领域,显著提升创意工作效率。

Mr数据杨 928

扫码登录原理

扫码登录功能通过PC端与移动端的交互实现安全认证,分为三个阶段:待扫描阶段生成唯一二维码ID并轮询状态;已扫描阶段移动端提交token与二维码ID关联,生成临时token并要求用户确认;确认阶段验证临时token后为PC端生成正式登录凭证。整个过程通过二维码唯一性、状态轮询和二次确认机制确保安全性,防止未授权登录,最终完成跨设备认证流程。

阿杰同学的博客 346

Socket编程和TCP协议实现

c++,socket编程,网络通信,linux,服务器高并发方案,TCP

qq_72680384的博客 1539

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

通过 Socket 实现 TCP 编程

通过 Socket 实现 TCP 编程 一、Socket简介 Socket通信实现步骤 1.创建ServerSocket和Socket 2.打开连接到Socket的输入/输出流 3.按照协议对Socket进行读/写操作 4.关闭输入输出流、关闭Socket 二、编程实现基于TCP的Socket通信之服务端与客户端 服务器端: 1.创建ServerSocket对象,绑定监听端口...

In_Joy的博客 398

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Socket编程】通过Socket实现TCP编程

随笔 - 35 文章 - 0 评论 - 33 【Socket编程】通过Socket实现TCP编程 阅读目录 一、通信过程(Socket通信模型) 二、Socket和ServerSocket常用方法 三、编程实现基于TCP/IP的用户登录小程序 四、使用多线程实现多客户端的通信 通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接、可靠的、有序的...

g200407331的专栏 329

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JAVA 通过 Socket 实现 TCP 编程

简介 所谓socket 通常也称作"**套接字**",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常**通过"套接字"向网络发出请求或者应答网络请求**。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。**ServerSocket用于服务器端,Socket是建立网络连接时使用的**。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成

王者之峰 12万+

通过Socket实现TCP编程(十二)

原文链接:https://www.cnblogs.com/hysum/p/7531529.html Socket通信 : TCP协议是面向对象连接、可靠的、有序的,以字节流的方式发送数据。 基于TCP协议实现网络通信的类: 客户端----Socket类 服务器端----ServerSocket类 一、Socket通信模型 (1)在服务端建立一个S...

247

利用codeblocks实现socket_Android 基于 TCP 的 Socket 编程实现

两个进程进行通讯最基本的前提是能唯一标识一个进程,在本地进程通讯中可以使用 PID 来唯一标识一个进程,但 PID 在本地是唯一的,网络中两个进程 PID 冲突几率很大,这就要通过其他手段来唯一标识进程了,IP 层的 ip 地址可以唯一标示主机,再结合 TCP 端口号就可以唯一标示某个主机的进程。唯一标示网络中的进程后,就可以利用 Socket 通信了,到底什么是 Socket 呢?我们...

weixin_29010003的博客 725

Java通过Socket实现TCP编程

TCP协议面向连接,可靠的,有序的,以字节流的方式发送数据 基于TCP协议实现网络通信的类: 客户端的Socket类 服务器端的ServerSocket类 通信模型: 实现步骤: 编程实现 服务器端 public class Server { public static void main(String[] args) { try { //1.创建一个服务器端socket,绑定端...

qq_41998047的博客 637

c语言通过socket编程实现tcp通信,C语言编程环境下如何利用socket实现TCP协议

socket编程是C语言编程中使用非常多的一种编程技术,下面我们就通过案例分析来了解一下,如何利用socket编程来实现网络通信协议。1、网络中进程之间如何通信?本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和SunRPC)但这些都不是...

weixin_42401159的博客 1024

基于socket网络编程技术实现TCP和UDP的流程详解及实例

具体函数讲解太多,根据程序自行分析。 可以参考这篇文章: https://blog.youkuaiyun.com/qq_41687938/article/details/119102328?spm=1001.2014.3001.5501 https://blog.youkuaiyun.com/weixin_42193813/article/details/105666316 一、socket 1.1 socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用

qq_41687938的博客 1万+
上一篇: java InetAddress类、URL类的使用
下一篇: JDBC -访问存储过程
flowser
博客等级 码龄11年 37粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值