服务器编程二

网络编程(二)——服务器和客户端的实现 本文继网络编程(一)继续学习 一、Socket服务器和客户端的开发步骤 创建Socket套接字 为套接字添加信息(IP地址和端口号) 监听网络连接 监听到有客户端接入,接受一个连接 数据交互 关闭套接字 二、网络编程的主要API 1.指定讲“汉语”(连接协议)——创建套接字 int socket (int domain,int type,int protocol) ; 参数解释: domain:指明所使用的协议族,通常为AF_INET ,表示互联网协议族( TCP/IP协议族) ; AF_INET 阅读详情

1、http协议(了解)

(1)什么是http协议(hypertext transport protocol |即超文本传输协议)?

是一种应用层协议,由w3c制订,她定义了浏览器(或者其他客户端)与web服务器之间通过程及数据格式。

(2)通讯过程

step1,浏览器建立与web服务器之间的连接(socket)

step2,浏览器将请求数据打包(请求数据包),然后发送给web服务器

step3、web服务器将结果打包(响应数据包),然后发送给浏览器

step4、web服务器关闭连接。

如果浏览器要再发请求,就必须重新建立一个新的连接。

特点:一次请求,一次连接;

优点: web服务器可以利用有限的连接个数为尽可能多的客户端服务

(3)数据格式

1)请求数据包


a、请求行(请求方式   请求资源路径  协议描述)

GET /web02/hello?qty=12 HTTP/1.1

b、若干消息头

消息头:

消息头是一些键值对,一般是由w3c定义,有特定的含义。浏览器和服务器自检,可以通过发送消息头来传递一些特定消息,比如,浏览器可以通过user-agent消息头来通知服务器浏览器的类型和版本。


c、实体内容


GET /web02/hello?qty=12 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 BIDUBrowser/6.x Safari/537.36
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,zh;q=0.8


上面的代码是一段抓包产生的

         

2)响应数据包

a、状态行:  协议的描述  状态码


b、若干消息头

 服务器也可以发送一些消息头给浏览器,比如content-type ,告诉浏览器服务器返回数据的格式和编码格式(字符集,比如utf-8,iso-8859-1)。



c、实体内容:


HTTP/1.1 200 OK
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 180
Date: Fri, 10 Oct 2014 05:48:03 GMT
Server: Apache-Coyote/1.1



(3)数据格式




2 GET请求和POST请求

   (1)那些情况,浏览器会使用GET方式发请求

a、直接在浏览器地址栏输入某个地址

b、点击链接

c、表单默认的提交方式

(2)那些情况下,浏览器会使用post方式发请求

a,设置表单的method属性值为“post”。

(3)GET请求的特点

GET请求会将请求参数添加到请求资路径的后面,因为请求行存放的数据大小有限,所以get请求请求只能提交少量的数据

get请求会将请求参数显示在浏览器地址栏,不安全。

(4)post请求的特点

post请求会将请求参数添加到实体内容里面,所以,可以提交大量的数据。

post请求不会将请求参数显示在浏览器地址栏,相对安全一些。注意,post请求并不会对请求参数进行加密处理(HttpS协议)

3  编码问题:

(1)Java语言在内存当中,会使用“Unicode”编码格式(字符集)来保存字符。


(2)编码:把Unicode这种编码格式对应的字节数组转化为某种笨的编码格式(如gbk)对应的字节数组。

Unicode--->gbk

  (3)解码:把某种本地编码格式的自己数组转换成Unicode这种编码格式对应的字节数组

(5)如果表单提交的时候,浏览器会对表单中的数据进行编码(会使用打开表单时的编码格式进行编码),而服务器默认的情况下,会使用iso-8859-1去解码,所以会产生乱码问题。

解决方式1:

step1、先保证表单所在的页面按照指定的编码格式打开。使用<meta http-equiv ="content-type "    content = "text/html;charset= utf-8">

step2、调用request.setCharacterEncodeing(“utf-8”);意思告诉服务器,使用制定的编码格式进行解码,该方法只使用于post请求。

解决方式2:

step1、先保证表单所在的页面按照指定的编码格式打开。使用<meta http-equiv ="content-type "    content = "text/html;charset= utf-8">

step2、使用new String(str.getBytes("iso-8859-1"),"utf-8");

4、如何读取请求参数?

(1)、String request.getParameter(String );

注意:

a、如果paraName(即参数名称)与实际的参数名称不一致,会获得null;

b、在使用表单数据时,如果用户没有填写任何的值,会获得“”。即空字符串

          (2)、方法二

String[] request.getParameterValues(String paraName)

注意:

a、当有多个参数名称相同时,使用该方法

5、访问数据库

(1)使用mysql数据库

a,登陆mysql

使用root用户来登陆

mysql -uroot

b,查看当前所有的数据库

show databases;

c,创建一个新的数据库

//创建一个名叫jd1304db的数据库

//并且设置器缺省的字符集为utf8

create database jd1304db

default character set utf8;

d,使用数据库

use jd1304db;

e,查看当前数据库有哪些表

show tables;

f,建表

create table t_emp(

id int primary key auto_increment,

name varchar(50),

salary double,

age int

);




primary key   :主键

auto_increment:  自增长列,即插入记录时,数据库会自定为该列赋一个唯一的值


增加记录


http://download.youkuaiyun.com/detail/cssdl/8031289   mysql 5.0 的驱动jar包下载】


(2)使用jdbc 访问数据库





汽车Bootloader流程 根据ISO14229-1 写的汽车行业 Bootloader流程 1:编程前 → 先读取软硬件版本号 22 F1 XX 软件信息 22 F1 XX 硬件信息 → 进入扩展会话extend diagnostic sessions 功能寻址 10 03 → 编程条件检测routine control:ECU升级条件的判断,如车速,检测车的型号 31 01 02 03 → 关闭DTC检测,(由于很多节点收不到其它节点的报文后会记录DTC故障)功能寻址 85 02 → 关闭诊断通讯(禁止各个节点的应用报... 阅读详情

相关推荐

微信小程序-如何根据缩放屏幕大小自适应icon图标更改marker

微信小程序如何根据用户的缩放屏幕来改变marker图标icon的大小,实现icon自适应屏幕缩放的效果

Bartender_VA11的博客 3980

服务器中的编码解码问题

什么是编码与解码  1. 文字->(数字01代码):编码encode:就是把看得懂的内容,转换成看不懂的内容。   2. (数字01代码) -&gt; 文字 : 解码decode:就是把看不懂的内容,转换成看懂的内容。 服务器与浏览器交互时对数据的处理方式 1.浏览器发送数据: html使用的编码格式时utf-8,所以浏览器中输入了某一数据,浏览器会先将...

大飞的博客 7532

树莓派5使用CSI摄像头 | 树莓派5接上CSI摄像头后命令行操作显示检测无设备

此系列用于记录树莓派5的一些操作,这篇文章讲述树莓派5如何使用CSI摄像头。

beyourself_he的博客 8795

Web应用中浏览器与服务端的编码和解码

基本概念有信息交换就会产生编码、传输、解码三个过程。编码是信息从一种形式转变成另一种形式的过程,正如人类的语言通过声带编码,转换成声波。解码是编码的逆函数,耳膜接收声波,通过脑神经解码成人类文化所能理解的信息。字符集是一种文化上下文下的所有文字符号集合,它的作用是规定了某个文化下的所有字符,以及该字符在信息交换系统下的表示方式,在计算机信息系统下是字节或01序列。本文会在某些时刻将字符集和编码方案互

小小默:进无止境 8436

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 364

【文献阅读笔记】之基于注意力机制的深度学习路面裂缝检测

中文,计算机辅助设计与图形学学报,第 32 卷 第 8 期,2020 年 8 月。 DOI: 10.3724/SP.J.1089.2020.18059 摘要: 为实现自动准确地检测路面裂缝, 提升路面裂缝检测效果, 提出了一种基于注意力机制的裂缝检测网络 (attention-based crack networks, ACNet). 该网络采用编码器-解码器网络构架, 编码器采用 ResNet34 为骨干网, 提取路面裂缝特征; 在编码器和解码器间加入基于注意力机制的特征模块(attention-b

qq_44785998的博客 7592

form表单提交数据编码方式和tomcat接受数据解码方式的思考

做java的web开发有段日子了,有个问题老是困扰着我,就是乱码问题,基本上是网上查找解决方案(网上资料真的很多),都是一大堆的介绍如何解决此类的乱码问题,但是没几个把问题的来龙去脉说清楚的,有时候看了些文章后,以为自己懂了,但是在开发中乱码问题又像鬼魂一样出来吓人,真是头大了!这篇文章是我长时间和乱码做斗争的一些理解的积累,还希望有更多的朋友给出指点和补充。 form有2中方法把数据提...

行有不得,反求诸己 217

ADS负载牵引仿真避坑指南:从零开始搞定Loadpull模板设置

本文是一份针对ADS负载牵引仿真的深度避坑指南,详细解析了Loadpull模板从初始化配置到结果解读的全过程。文章重点阐述了如何根据设计目标灵活设置扫描圆、采样点等关键参数,以解决仿真不收敛、结果不完整等常见问题,并指导读者在功率与效率之间做出理性权衡,最终提取出用于匹配网络设计的最优负载阻抗。

weixin_29234423的博客 594

网络编程(二)TCP多线程服务器编程详解

注:这里多线程编程使用的是c++11标准里面的跨平台方法。 前面已经介绍了单线程服务器编程的一个例子,为了实现一个服务器能够并发响应多个客户端的请求,这里引入多线程的方法: 将原来的单线程服务器改造成多线程服务器只需要改动下面两个地方 1,因为listen()监听函数过后,服务器的ip与端口就会暴露在网络中,网络中连接的各个客户端就可以连接该服务器,而所有的连接请求都会存储在监听文件描述符对应的读缓冲区中,每执行一次accept,就会从该监听文件描述符对应的读缓冲区中读取一个连接,因此,如果是多线程服务器,

weixin_42445051的博客 6651

UE5音效系统全解析:从Sound Cue到MetaSounds的实战指南

在游戏开发中,音频系统是构建沉浸式体验的关键技术之一。其核心原理在于通过数字信号处理(DSP)和空间音频渲染,模拟真实世界的听觉感知。传统音频管线通常基于静态资源播放与混合,而现代引擎则引入了程序化音频生成与动态调制技术,这极大地提升了音频的互动性与表现力,使其能够实时响应游戏状态变化。这一技术革新对于开发开放世界、VR及3A级游戏尤为重要,它能实现风吹草动皆有不同声响、音效随环境动态变化的细腻效果。本文聚焦虚幻引擎5(UE5)的音效系统,深入剖析其新旧两套核心架构:稳定高效的Sound Cue、Sound

weixin_31179927的博客 330

[特殊字符]用Python爬取中国裁判文书网案例信息:从爬虫到数据可视化全流程实战(附代码)

✅ 分析裁判文书网的网页结构;✅ 自动化爬取案件信息;✅ 解析加密参数并获取数据;✅ 数据可视化图表输出;✅ 模块化构建爬虫系统。

2201_76125261的博客 2822

Linux网络编程笔记:socket编程(二),简单的并发服务器

Linux网络编程笔记:socket编程(二) 一、概述 前面一篇笔记主要写了socket的基础知识,包括什么是socket,socket在网络模型中的位置,socket编程常用的函数,最后编写了一个简单的单客户端访问服务器通信的程序。 在实际的应用场景中,单客户端访问的机制显然不能满足需求的,要能够实现多个服务器能够同时访问的技术。可以利用多进程和多线程的方式实现多个客户端同时访问的机制。以下主要通过程序的形式,展现是如何实现的。 二、多进程实现 客户端程序不需要更改,跟前一篇内容相同。在创建多进程进行搭

weixin_43952192的博客 264

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

Java网络编程入门(二)之客户端与服务器端编程步骤详解

1.2 网络编程技术 前面介绍了网络编程的相关基础知识,初步建立了网络编程的概念,但是实际学习网络编程还必须使用某种程序设计语言进行代码实现,下面就介绍一下网络编程的代码实现。 1.2.1 网络编程步骤 按照前面的基础知识介绍,无论使用TCP方式还是UDP方式进行网络通讯,网络编程都是由客户端和服务器端组成。当然,B/S结构的编程中只需要实现服务器端即可。所以,下面介绍网络编程的步骤时,均以C/S结构为基础进行介绍。 **说明:**这里的步骤实现和语言无关,也就是说,这个步骤适用于各种语言实现,不局限于Ja

m0_67401153的博客 2200

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++服务器(二):Windows下的socket编程

在上一篇博客中,我主要写了Linux下的sokcet编程,这篇文章,主要是想写一下Windows下的编程时怎样的。 为后期实现服务器的跨平台做好准备。以前刚好做过 TCP 、UDP socket 编程的一些工作,这里也顺便记录一下以前的内容吧UDPUDP是一种面向无连接、不可靠的传输层协议。 其中 UDP 的连接过程如下: TCPTCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。代码

小键233 4168

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

网络编程二、回声服务器

实现一个简单的回声服务器及客户端.通过回声服务器/客户端实例,我们更加深刻的理解了TCP传输数据不存在边界的特性,即recv函数和send函数的调用次数并无太大意义,因为每次recv都会获取输入缓冲中的所有内容。也更加深刻理解了recv和send函数的应用,这里通过send和recv函数的返回值来实现完美的回声客户端。

SNAKEpc12138的博客 194

互联网编程:实验二 多线程/线程池TCP服务器端程序设计

互联网编程:实验二 多线程/线程池TCP服务器端程序设计 多线程TCP服务器、线程池TCP服务器、编程扩充线程池TCP服务器的功能,增加日志功能模块。

gyeolhada的博客 810

高并发服务器编程之epoll(二)

服务器示例这里使用epoll_data联合体中的ptr指针。fd的使用链接:epoll_data.fd#include &lt;stdio.h&gt; #include &lt;unistd.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;errno.h&gt; #include &lt;sys/type...

CoolBoy 340

TCP网络编程(二)—— 服务器端的编写

上篇文章我们学习了TCP的两种编程模式,这篇文章我们将开始编写服务器端的代码,讲解代码的原理。完整代码在文章的最后。

2302_80790488的博客 1246

pythonweb服务器编程(二)

Web静态服务器-1-显示固定的页面 #coding=utf-8 import socket from multiprocessing import Process def handleClient(clientSocket): '用一个新的进程,为一个客户端进行服务' recvData = clientSocket.recv(2014) requ...

weixin_34417183的博客 91

Linux高性能服务器编程(二)

文章目录5.网络编程api5.1 主机字节序、网络字节序5.2 创建socket5.3 绑定地址5.4 创建一个监听队列来存放待处理的客户连接5.5 从监听对列中接受一个连接5.6 发起连接5.7 关闭连接5.8 数据读写5.9 获取socket地址(本端、对端)5.10 获取、设置socket选项5.11 根据主机名(IP)获取主机的完整信息5.12 根据名称(端口号)获取某个服务的完整信息 5...

神秘的火柴人的专栏 953

【服务器编程】Linux多进程编程(二)

本文接这上一篇【服务器编程】Linux多进程编程(一)的内容介绍Linux多进程编程中常用的两种方式:共享内存和消息队列。 本文的内容是阅读总结游双的《Linux高性能服务器编程》第13章“多进程编程“而来 共享内存 共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效率带来的问题是,我们必须用其他辅助手段来同步进程对共享内存的访问,否则会产生竞态条件。Linux共享内存的API都定义在sys/shm.h头文件中,包括4个系统调用:shmget、shmat、shmdt和shmctl.

on_my_wayshake的博客 244

教程(二):Boost.Asio 网络编程入门(TCP/UDP 服务器与客户端)

本篇是 C++ Boost 库教程(二):Boost.Asio 网络编程入门(TCP/UDP 服务器与客户端),旨在帮助您掌握 Boost.Asio 的基础网络编程,重点实现 TCP 和 UDP 服务器与客户端的开发。您提到仍在 x86 编译器环境,且多次尝试未生成 libboost_system-vc143-mt-gd-x64-1_88.lib 和 libboost_log-vc143-mt-gd-x64-1_88.lib。若您仍未生成所需的 Boost 库,我会在文末提供针对性解决方案。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1085

C#网络编程系列文章(二)之Socket实现同步TCP服务器

原创性声明 本文作者:小竹zz  本文地址http://blog.youkuaiyun.com/zhujunxxxxx/article/details/44258719 转载请注明出处 本文介绍 在上一篇博客中我说了,我将会介绍c#中使用Socket和TcpListener和UdpClient实现各种同步和异步的TCP和UDP服务器,这些都是是我自己花了很多天的时间来总结的,这样一来相信刚接触c#网络编

超纯的小白兔 1万+

Linux网络编程(二)——多进程并发服务器

1.TCP循环服务器 ①TCP循环服务器一次只能处理一个客户端的请求。 ②只有在这个客户的所有请求都满足后, 服务器才可以继续后面的请求。 ③这样如果有一个客户端占住服务器不放时,其它的客户机都不能工作了.因此,TCP服务器一般很少用循环服务器模型。 循环服务器模型: socket(); bind(); listen(); while(1){ accept(); process(); close(); } 之前我们已经写了一个简单的循环服务器程序,但是如果我们想

分享一些自己的学习心得体会和总结! 842

Windows网络编程示例二——反应式echo服务器

代码组织上不是很合理,很多细节没有注意,只是作为一个演示记下反应式I/O的一种使用模式,通过telnet作为客户端演示之。/**//** * 基于反应式I/O的echo服务器。监听端口5432,CTRL+C优雅结束服务。 *  * * 完成: * 1)通过单线程为多个客户提供服务。 * 2)通过信号机制优雅的结束服务。 * 3)减少fd_set的构建。 * 4)避免资源泄露。 * * 未完

dananhai的专栏 1267
上一篇: 服务器编程一
下一篇: 提高SDK下载速度
cssdl
博客等级 码龄15年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值