客户端与服务器

客户端与服务器
客户端与服务器

客户端到服务器端的通信过程

https://www.360docs.net/doc/7818252496.html,/84448/

2015/02/20 ·开发· 5.3K 阅读· .Net, socket

分享到:41

?与《YII框架》不得不说的故事—高效篇

?Unity3D快速入门

?SQL Server基础--T-SQL语句

?PHPExcel探索之旅

原文出处:碧雪轩的博客欢迎分享原创到伯乐头条

学习任何东西,我们只要搞清楚其原理,就会触类旁通。现在结和我所学,我想总结一下客户端到服务器端的通信过程。只有明白了原理,我们才会明白当我们程序开发过程中错误的问题会出现在那,才会更好的解决问题。

我们首先要了解一个概念性的词汇:Socket

socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)socket非常类似于电话的插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码可以当作是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码(IP地址),相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接,通信完成。

以上通信是以两个人通话做为事例来在概的说明了下通信,但是现在假如通信中的一个人是外国人(说英语),一个人是中国人(说普通话),他们俩相互通信的话,都不能听明白对方说的是什么,那么他们的沟通就不能够完成。但是如果我们给一个规定,给通话双方,只能讲普通话,那么双方沟通就没有障碍了。这就引出来了通信协议。

有两种类型:(Tcp协议与Udp协议):

Tcp协议与Udp协议是在两硬件设备上进行通信传输的一种数据语法。

–流式Socket(STREAM):

是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;Tcp:是以流的形式来传的。

–数据报式Socket(DATAGRAM):

是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.Udp:将数据包拆开为若干份编号后来传输。在传输的过程中容易出现数据的丢失。但是传输速度要比TCP的快。

Socket的通信流程

Demo:

服务器端:

– 申请一个socket (socketWatch)用来监听的

– 绑定到一个IP 地址和一个端口上

– 开启侦听,等待接授客户端的连接

– 当有连接时创建一个用于和连接进来的客户端进行通信的socket (socketConnection) – 即续监听,等侍下一个客户的连接

代码如下: 1 2 3 4 using System;

using System.Collections.Generic;

using https://www.360docs.net/doc/7818252496.html,ponentModel;

using System.Data;

5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using https://www.360docs.net/doc/7818252496.html,;//IPAdress,IPEndPoint(ip 和端口)类

using https://www.360docs.net/doc/7818252496.html,.Sockets;

using System.Threading;

using System.IO;

namespace MyChatRoomServer

{

public partial class FChatServer : Form

{

public FChatServer()

{

InitializeComponent();

TextBox.CheckForIllegalCrossThreadCalls = false ;//关闭 对 文本框 的跨线程操作检查

}

Thread threadWatch = null ;//负责监听 客户端 连接请求的 线程

Socket socketWatch = null ;//负责监听的 套接字

private void btnBeginListen_Click(object sender, EventArgs e)

{

//创建 服务端 负责监听的 套接字,参数(使用IP4寻址协议,使用流式连接,使用TCP 协议传输数据)

socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//获得文本框中的 IP 地址对象

IPAddress address = IPAddress.Parse(txtIP.Text.Trim());

//创建 包含 ip 和 port 的网络节点对象

IPEndPoint endpoint = new IPEndPoint(address,

int .Parse(txtPort.Text.Trim()));

//将 负责监听 的套接字 绑定到 唯一的IP 和端口上

socketWatch.Bind(endpoint);

//设置监听队列的长度

socketWatch.Listen(10);

//创建 负责监听的线程,并传入监听方法

threadWatch = new Thread(WatchConnecting);

threadWatch.IsBackground = true ;//设置为后台线程

threadWatch.Start();//开启线程

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 ShowMsg("服务器启动监听成功~");

//IPEndPoint

//socketWatch.Bind(

}

//保存了服务器端 所有负责和客户端通信的套接字

Dictionary dict = new Dictionary(); //保存了服务器端 所有负责调用 通信套接字.Receive 方法 的线程

Dictionary dictThread = new Dictionary();

//Socket sokConnection = null;

///

/// 监听客户端请求的方法

///

void WatchConnecting()

{

while (true )//持续不断的监听新的客户端的连接请求

{

//开始监听 客户端 连接请求,注意:Accept 方法,会阻断当前的线程! Socket sokConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责和该客户端通信的套接字 sokConnection

//sokConnection.Receive

//向 列表控件中 添加一个 客户端的ip 端口字符串,作为客户端的唯一标识 lbOnline.Items.Add(sokConnection.RemoteEndPoint.ToString()); //将 与客户端通信的 套接字对象 sokConnection 添加到 键值对集合中,并以客户端IP 端口作为键

dict.Add(sokConnection.RemoteEndPoint.ToString(), sokConnection);

//创建 通信线程

ParameterizedThreadStart pts = new ParameterizedThreadStart(RecMsg); Thread thr = new Thread(pts);

thr.IsBackground = true ;//设置为

thr.Start(sokConnection);//启动线程 并为线程要调用的方法RecMsg 传入参数sokConnection

dictThread.Add(sokConnection.RemoteEndPoint.ToString(), thr);//将线程 保存在 字典里,方便大家以后做“踢人”功能的时候用

ShowMsg("客户端连接成功!" +

sokConnection.RemoteEndPoint.ToString());

//sokConnection.RemoteEndPoint 中保存的是 当前连接客户端的 Ip 和端口 }

}

///

93

94

95

96

97

98

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 /// 服务端负责监听客户端发送来的数据的方法///

void RecMsg(object socketClientPara)

{

Socket socketClient = socketClientPara as Socket;

while (true)

{

//定义一个接收用的缓存区(2M字节数组)

byte[] arrMsgRec = new byte[1024 * 1024 * 2];

//将接收到的数据存入 arrMsgRec 数组,并返回真正接收到的数据的长度

int length=-1;

try

{

length = socketClient.Receive(arrMsgRec);

}

catch (SocketException ex)

{

ShowMsg("异常:" + ex.Message);

//从通信套接字集合中删除被中断连接的通信套接字对象

dict.Remove(socketClient.RemoteEndPoint.ToString());

//从通信线程结合中删除被终端连接的通信线程对象

dictThread.Remove(socketClient.RemoteEndPoint.ToString());

//从列表中移除被中断的连接 ip:Port

lbOnline.Items.Remove(socketClient.RemoteEndPoint.ToString());

break;

}

catch (Exception ex)

{

ShowMsg("异常:" + ex.Message);

break;

}

if (arrMsgRec[0] == 0)//判断发送过来的数据的第一个元素是 0,则代表发送来的是文字数据

{

//此时是将数组所有的元素都转成字符串,而真正接收到的只有服务端发来的几个字符

string strMsgRec =

System.Text.Encoding.UTF8.GetString(arrMsgRec,1, length-1);

ShowMsg(strMsgRec);

}

else if (arrMsgRec[0] == 1)//如果是1 ,则代表发送过来的是文件数据(图片/视频/文件....)

{

SaveFileDialog sfd = new SaveFileDialog();//保存文件选择框对象

137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)//

用户选择文件路径后

{

string fileSavePath = sfd.FileName;//获得要保存的文件路径

//创建文件流,然后让文件流来根据路径创建一个文件

using (FileStream fs = new FileStream(fileSavePath, FileMode.Create))

{

fs.Write(arrMsgRec, 1, length-1);

ShowMsg("文件保存成功:" + fileSavePath);

}

}

}

}

}

//发送消息到客户端

private void btnSend_Click(object sender, EventArgs e)

{

if (string.IsNullOrEmpty(lbOnline.Text))

{

MessageBox.Show("请选择要发送的好友");

}

else

{

string strMsg = txtMsgSend.Text.Trim();

//将要发送的字符串转成 utf8对应的字节数组

byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg);

//获得列表中选中的KEY

string strClientKey = lbOnline.Text;

//通过key,找到字典集合中对应的与某个客户端通信的套接字的 send方法,发送数据给对方

try

{

dict[strClientKey].Send(arrMsg);

//sokConnection.Send(arrMsg);

ShowMsg("发送了数据出去:" + strMsg);

}

catch (SocketException ex)

{

ShowMsg("发送时异常:"+ex.Message);

}

catch (Exception ex)

{

181 182 183 184 185 186 187 188 189 ShowMsg("发送时异常:" + ex.Message);

}

}

}

//服务端群发消息

private void btnSendToAll_Click(object sender, EventArgs e)

{

string strMsg = txtMsgSend.Text.Trim();

//将要发送的字符串 转成 utf8对应的字节数组

byte [] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg);

foreach (Socket s in dict.Values)

{

s.Send(arrMsg);

}

ShowMsg("群发完毕!:)");

}

#region 显示消息

///

/// 显示消息

///

///

void ShowMsg(string msg)

{

客户端:

– 申请一个socket(socketClient)

– 连接服务器(指明IP 地址和端口号)

代码如下:

1 2

3 4

5 6

7 8

using System;

using System.Collections.Generic;

using https://www.360docs.net/doc/7818252496.html,ponentModel;

using System.Data;

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using https://www.360docs.net/doc/7818252496.html,.Sockets;

using https://www.360docs.net/doc/7818252496.html,;

using System.Threading;

namespace MyChatRoomClient

{

public partial class FChatClient : Form

{

public FChatClient()

{

InitializeComponent();

TextBox.CheckForIllegalCrossThreadCalls = false ;

}

Thread threadClient = null ; //客户端 负责 接收 服务端发来的数据消息的线程

Socket socketClient = null ;//客户端套接字

//客户端发送连接请求到服务器

private void btnConnect_Click(object sender, EventArgs e)

{

IPAddress address = IPAddress.Parse(txtIP.Text.Trim());//获得IP

53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 IPEndPoint endpoint = new IPEndPoint(address,

int .Parse(txtPort.Text.Trim()));//网络节点

//创建客户端套接字

socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//向 指定的IP 和端口 发送连接请求

socketClient.Connect(endpoint);

//客户端 创建线程 监听服务端 发来的消息

threadClient = new Thread(RecMsg);

threadClient.IsBackground = true ;

threadClient.Start();

}

///

/// 监听服务端 发来的消息

///

void RecMsg()

{

while (true )

{

//定义一个 接收用的 缓存区(2M 字节数组)

byte [] arrMsgRec = new byte [1024 * 1024 * 2];

//将接收到的数据 存入 arrMsgRec 数组,并返回 真正接收到的数据 的长度

int length= socketClient.Receive(arrMsgRec);

97

98

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 //此时是将数组所有的元素都转成字符串,而真正接收到的只有服务端发来的

几个字符

string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);

ShowMsg(strMsgRec);

}

}

void ShowMsg(string msg)

{

txtMsg.AppendText(msg + "\r\n");

}

}

}

通信过程图

通过以上流程图我们可以看出,客户端与服务器端之间的一个基本通信流程,概括一下Socket 一般应用模式(客户端和服务器端)的作用:

服务器端:最少有两个socket,一个是服务端负责监听客户端发来连接请求,但不负责与请求的客户端通信,另一个是每当服务器端成功接收到客户端时,但在服务器端创建一个用与请求的客户端进行通信的socket.

客户端:指定要连接的服务器端地址和端口,通过创建一个socket对象来初始化一个到服务器端的TCP连接。

其实很早就想写下这篇总结了,但是由于工作较忙,一直推迟到现在。这篇总结也是为我接下来要写的浏览器与Iis服务器的通信过程和https://www.360docs.net/doc/7818252496.html,页面生命周期做一个铺垫,现在终于写完了,来和大家一起分享一下,不完善的地方,我将在以后的工作和学习过程中慢慢补充。

关于客户端与数据库服务器端的时间同步问题

关于客户端与数据库服务器端的时间同步问题 这是一个做C/S的管理软件开发时经常被忽略的问题,客户端的时间与服务器的时间如果有偏差,数据统计、报表等等肯定会有“意外”的情况发生。 意图很简单:从数据库服务器获取到时间,根据这个时间修改当前客户端电脑时间。 用Sql的函数getdate(),是比较容易的。 我们是基于dotnet4.0、EntityFramework开发软件,所以希望用ESQL的方式获取数据库服务器的时间,但昨天折腾了半天,还没搞定。 如果有哪位同学已经解决了这个问题,希望能指点一下! 暂时解决,之所以说是暂时,是因为并没有用Esql的方式,而是用T-Sql的方式。 以下是我的过程: System.Data.EntityClient.EntityConnection 这个是实体概念模型与数据源的连接,继承自DbConnection 在这个连接下CreateCommand(),就需要写Esql语句,我的语句是"SELECT VALUE CurrentDateTime()",却是语法错误。翻遍了手册和网络查询,没有任何有用的结果。 但在这个连接对象下有一个属性StoreConnection,返回的是Sql方式的连接,在这个下面CreateCommand(),可以写T-Sql语句,我的语句是"SELECT getdate()",运行成功。

以上是程序代码例子: //与数据库服务器的时间进行同步 System.Data.EntityClient.EntityConnection conn = (System.D ata.EntityClient.EntityConnection)Blemployee.myData.Conne ction ; IDbConnection conn0=conn.StoreConnection; IDbCommand comm =conn0.CreateCommand(); //https://www.360docs.net/doc/7818252496.html,mandText = "SELECT VALUE CurrentDateTime()"; https://www.360docs.net/doc/7818252496.html,mandText = "SELECT getdate()"; https://www.360docs.net/doc/7818252496.html,mandType = CommandType.Text; if (comm.Connection.State != ConnectionState.Open) comm.Connection.Open(); object tt= comm.ExecuteScalar(); DateTime sqlDT = Convert.ToDateTime(tt); SetLocalTime(sqlDT); //设置本机时间

服务器端与客户端建立并连接小Demo

服务器端代码: using https://www.360docs.net/doc/7818252496.html,; using https://www.360docs.net/doc/7818252496.html,.Sockets; Static void Main(string[] args){ Socket serverSocket=new Socket(AddressFamily.InterNetWork,SocketType.Stream,ProtocalTy pe.TCP); //new一个Socket对象,注意这里用的是流式Socket(针对于面向连接的TCP服务应用)而不是数据报式Socket(针对于面向无连接的UDP服务应用)。 IPAddress serverIP=IPAddress.Parse("127.0.0.1"); int port=2112; IPEndPoint ipEndPoint=new IPEndPoint(serverIP,port);//网络节点对象 serverSocket.Bind(ipEndPoint);//将结点绑定到套接字上 serverSocket.Listen(10);//设置连接队列的最大长度,可根据服务器的性能,可以设置更大程度。 Console.WriteLine("服务器已就绪准备客户端连接。。。。"); while(true){//循环监听端口,得到客户端连接 Socket socket=serverSocket.Accept();//当有客户端连接时,就产生一个socket实例 SessionServer sserver=new SessionServer(socket);//将socket实例传入到消息处理类中 Thread t=new Thread(sserver.GetClientMsg);//当有一个客户端连接,就启动一个线程来处理此客户端的消息 t.Start();

客户端与服务器端交互原理

客户端与服务器端交互原理 经常看到HTTP客户端与服务器端交互原理的各种版本的文章,但是专业术语太多,且流程过于复杂,不容易消化。于是就按照在Servlet 里面的内容大致做了一些穿插。本来连Tomcat容器和Servlet的生命周期也准备在这里一起写的,但怕过于庞大,于是就简单的引用了一些Servlet对象。这样的一个整个流程看下来,相信至少在理解HTTP协议和request和response是如何完成从请求到生成响应结果回发的。在后续的一些文章里会专门讲一讲Tomcat和Servlet 是如何处理请求和完成响应的,更多的是说明Servlet的生命周期。 HTTP介绍 1. HTTP是一种超文本传送协议(HyperText Transfer Protocol),是一套计算机在网络中通信的一种规则。在TCP/IP体系结构中,HTTP属于应用层协议,位于TCP/IP协议的顶层。 2. HTTP是一种无状态的协议,意思是指在Web浏览器(客户端)和Web 服务器之间不需要建立持久的连接。整个过程就是当一个客户端向服务器端发送一个请求(request),然后Web服务器返回一个响应(respo nse),之后连接就关闭了,在服务端此时是没有保留连接的信息。 3. HTTP遵循请求/响应(request/response)模型的,所有的通信交互都被构造在一套请求和响应模型中。 4. 浏览Web时,浏览器通过HTTP协议与Web服务器交换信息,Web服务器向Web 浏览器返回的文件都有与之相关的类型,这些信息类型的格式由 MIME 定义。 HTTP定义的事务处理由以下四步组成: 1. 建立连接。 2?客户端发送HTTP请求头。 3. 服务器端响应生成结果回发。 4. 服务器端关闭连接,客户端解析回发响应头,恢复页面。

客户机与服务器结构.

C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和 Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。概要(Client/Server或客户/服务器模式):Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。编辑本段C/S工作模式C/S 结构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。客户端完成数据处理,数据表示以及用户接口功能;服务器端完成DBMS的核心功能。这种客户请求服务、服务器提供服务的处理方式是一种新型的计算机应用模式。编辑本段C/S结构的优点C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户

服务器和客户端通信

实验六基于TCP/IP的网络编程 1 实验目的 MFC提供的关于网络应用的类CSocket是一个比较高级的封装,使用它编制出属于自己的网络应用程序,可以编一个属于自己的网络通讯软件。通过这个实验,同学们也可以增进对于TCP/IP协议的理解。 2 实验内容 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(closesocket)。 第二部分客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(closesocket)。 CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket 选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。) (1)构造CSocket对象,如下例: CSocket ServerSocket; CSocket ClientSocket; (2)CSocket对象的Create函数用来创建Windows Socket,Create()函数会自行调用Bind()函数将此Socket绑定到指定的地址上面。如下例: ServerSocket.Create(823); //服务器端需要指定一个端口号,我们用823。ClientSocket.Create(); //客户端不用指定端口号。 (3)现在已经创建完基本的Socket对象了,现在我们来启动它,对于服务器端,我们需要这个Socket不停的监听是否有来自于网络上的连接请求,如下例: ServerSocket.Listen(5);//参数5是表示我们的待处理Socket队列中最多能有几个Socket。(4)对于客户端我们就要实行连接了,具体实现如下例: ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是端口号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(ReceiveSocket)来接收它,而此时服务器端还须建立一个新的CSocket对象,用它来和客户端进行交流。如下例:CSocket ReceiveSocket; ServerSocket.Accept(ReceiveSocket); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。 (7)代码 package test.socket3; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

客户端服务器模型

6.2 客户端/服务器及其交互 Internet和大多数现代网络应用程序都采用客户/服务器模型,这种分布式架构是几乎所有用户同Internet交互的基础。本节介绍客户/服务器模型以及计算机可扮演的角色。 6.2.1 客户端/服务器模型 每天,大批用户通过网络和Internet提供的服务与他人通信和执行日常任务。人们很少想到服务器、客户端和网络设备,但如果没有它们,我们就不能接收电子邮件、在博客中输入信息或到网上商店购物。大多数常用Internet应用程序都依赖于各种服务器和客户端之间复杂的交互。 术语服务器指的是这样一种计算机或其他网络设备:它们运行的软件应用程序可向连接到网络的其他主机提供信息或服务。一个典型的例子是Web服务器,如图6.1所示。当前,数以百万计的服务器连接到Internet,它们提供网站、电子邮件、金融交易和音乐下载等服务。确保这些复杂交互能够正常进行的一个关键因素是,它们使用一致的标准和协议。 图6.1 访问Web服务器 为请求和查看网页,需要使用运行Web客户端软件的设备。客户端指的是访问服务器中存储的信息时使用的计算机应用程序,一个典型的例子是Web浏览器。如图6.2所示,一个客户端正显示来自Web服务器的网页,该过程包含3步: 1.客户端首先使用服务器的IP地址请求网络;

2.服务器通过将网页发送给客户端的IP地址来做出响应; 3.Web客户端软件对网页进行格式化并将其显示给用户。 客户端向服务器发出请求,服务器通过执行操作(如将信息发回客户端)做出响应,这就是客户/服务器模型的重要特征。Web浏览器和Web服务器的组合可能是最常用的客户/服务器系统。图6.3所示的服务器提供了私有网络和Internet中最常见的服务,对其中每种服务简要介绍如下所示。 域名服务器(DNS):提供网站的IP地址或域名,让主机能够连接到它。 Telnet服务器:像访问本地连接的主机一样访问远程主机。 图6.2 Web客户端显示来自服务器的网页

Oracle服务器和客户端的安装(图解)

处于网络覆盖的时代,数据库对于现代社会和行业已经不是什么新鲜事物,它已经被运用到了社会生产和生活的各个领域。作于一款高性能、高生产率的数据库管理应用平台,Oracle9i在数据库管理、数据完整性检查、数据库查询性能、数据安全性方面都具有强大的功能,而且它在保密机制、备份与恢复、空间管理、开放式链接以及开发工具方面提供了不同手段和方法,总之,Oracle9i已成为现代企业高效率作业的利器,成为不同用户、开发者以及管理者不可多得的优秀软件工具。本文就简单介绍一下Oracle9i的网络数据库应用实现过程,由于Oracle9i庞大的功能,本文力求言简意赅,希望能为初学者带来抛砖引玉的效果。 资源准备: 工欲善其事,必先利其器,Oracle9i对系统资源要求比较高,如果缺少较高的硬件和软件的配置支持的话,它的运行效率将会大大折扣。 硬件配置: 应用: 本文主要讲解Oracle数据库在网络中的应用实现,考虑到读者的知识结构和文章的可读性,笔者根据数据库架设运作中访问方式的不同,将网络数据库的运用笼统的分为两种模式:一是基于服务器-客户机模式的,另一种是基于服务器-浏览器模式的。读者只需明白Oracle9i由于采用了Oracle Net机制,所以能够很容易地利用现有网络进行数据通信。 一、服务器-客户机模式 第一要务篇:安装 服务器端安装: 所谓服务器端就是用来做数据库服务器的电脑端,我们首先要做的事情肯定是要安装Oracle9i服务器,安装步骤如下:

图1 图2

将Oracle的第一张安装光盘放入光驱,光盘会自动启动,如图1所示,单击[开始安装按钮],进入Oracle通用安装器,见图2,单击[下一步]。 选择Oracle的安装路径和名称: 图3 在如图3所示的对话框中,选择Oracle的来源安装路径以及目标名称及路径。一般,安装产品文件名通常都为products,jar,系统会默认识别来源安装路径的。单击[下一步],继续安装。如果选择正确,你将看到装载产品的进度指示器。 选择安装Oracle9i数据库服务器:

c#带界面-客户端与服务器通信TCP

服务器端界面 服务器端代码: using System; using System.Collections.Generic; using https://www.360docs.net/doc/7818252496.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using https://www.360docs.net/doc/7818252496.html,.Sockets; using System.Threading; using System.IO; using https://www.360docs.net/doc/7818252496.html,; using System.Collections; namespace IMS.Server { public partial class Server : Form { TcpListener myListener; TcpClient tcpClient = new TcpClient(); Thread mythread; NetworkStream ns;

public Server() { InitializeComponent(); } private void Server_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; mythread = new Thread(new ThreadStart(receive)); mythread.IsBackground = true; mythread.Start(); } private void receive() { myListener = new TcpListener(IPAddress.Parse("192.168.1.106"), 8080); myListener.Start(); tcpClient = myListener.AcceptTcpClient(); while (true) { string rec = ""; ns = tcpClient.GetStream(); byte[] bytes = new byte[1024]; ns.Read(bytes,0,bytes.Length); rec = Encoding.Unicode.GetString(bytes); richTextBox1.Text = rec; ns.Flush(); } } private void btnSend_Click(object sender, EventArgs e) { try { ns = tcpClient.GetStream(); byte[] bytes = new byte[1024]; // bytes = Encoding.Unicode.GetBytes(sendmsg); bytes = Encoding.Unicode.GetBytes(richTextBox1.Text +"\r\n" + "服务器说:" + richTextBox2.Text);

oracle服务器端与客户端配置

近段时间很多网友提出监听配置相关问题,客户终端(Client)无法连接服务器端(Server)。本文现对监听配置作一简单介绍,并提出一些客户终端无法连接服务器端的解决思路,愿对广大网友与读者有一些帮助。 一、监听器(LISTENER) 监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。 二、本地服务名(Tnsname) Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器端监听器对客户端连接请求进行合法检查,如果连接请求有效,则进行连接,否则拒绝该连接。 本地服务名是Oracle客户端网络配置的一种,另外还有Oracle名字服务器(Oracle Names Server)等。Oracle常用的客户端配置就是采用的本地服务名,本文中介绍的也主要是基于本地服务名的配置。 三、Oracle网络连接配置方法 配置Oracle服务器端与客户端都可以在其自带的图形化Oracle网络管理器(Oracle Net Manager)里完成(强烈建议在这个图形化的工具下完成Oracle 服务端或客户端的配置)。在Windows下,点击“开始/程序/Oracle - OraHome92/Configuration and Migration Tools/Net Manager”启动Oracle 网络管理器工具,在Linux/Unix下,利用netmgr命令来启动图形化Oracle网络管理器,如: $ netmgr Windows下启动Net Manager图形窗口如下图示:

Linux网络编程-简单的客户端和服务器通讯程序开发入门

Linux网络编程-基础知识(1) 1. Linux网络知识介绍 1.1 客户端程序和服务端程序 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接. 一般的来说是服务端的程序在一个端口上监听,直到有一个客户端的程序发来了请求. 1.2 常用的命令 由于网络程序是有两个部分组成,所以在调试的时候比较麻烦,为此我们有必要知道一些常用的网络命令 netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息. netstat有许多的选项我们常用的选项是-an 用来显示详细的网络状态.至于其它的选项我们可以使用帮助手册获得详细的情况. telnet telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程序的. 比如我们的服务器程序在监听8888端口,我们可以用telnet localhost 8888来查看服务端的状况. 1.3 TCP/UDP介绍 TCP(Transfer Control Protocol)传输控制协议是一种面向连接的协议, 当我们的网络程序使用这个协议的时候,网络可以保证我们的客户端和服务端的连接是可靠的,安全的. UDP(User Datagram Protocol)用户数据报协议是一种非面向连接的协议, 这种协议并不能保证我们的网络程序的连接是可靠的,所以我们现在编写的程序一般是采用TCP协议的. Linux网络编程-简单的客户端和服务器通讯程序开发入门(2)简介: 本文详细介绍了Linux下B/S结构的客户端服务器通讯程序的开发入门, 其中对重要的网络函数和结构体作了详细的说明和分析, 最后给出一个简单的客户端和服务器通讯程序示例以加深理解。 2. 初等网络函数介绍(TCP) Linux系统是通过提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用, 会返回一个通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作, 这就是linux的设备无关性的好处.我们可以通过向描述符读写操作实现网络之间的数据交流. 2.1 socket

网络编程服务器与客户端编程

网络编程服务器与客户端编程2010-10-2915:50:08|分类:Linux下C语言| TCP编程的服务器端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();*可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数send()和recv(),者read()和write(); 7、关闭网络连接; 8、关闭监听; TCP编程的客户端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();*可选 3、绑定IP地址、端口等信息到socket上,用函数bind();*可选 4、设置要连接的对方的IP地址和端口等属性; 5、连接服务器,用函数connect(); 6、收发数据,用函数send()和recv(),或者read()和write(); 7、关闭网络连接; 与之对应的UDP编程步骤要简单许多,分别如下: UDP编程的服务器端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();*可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、循环接收数据,用函数recvfrom(); 5、关闭网络连接; UDP编程的客户端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();*可选 3、绑定IP地址、端口等信息到socket上,用函数bind();*可选 4、设置对方的IP地址和端口等属性;

TCP服务器与客户端软件

学院:信电学院班级:电信102 姓名:公维蒙学号:2010081266 课程:应用软件综合实验实验日期:2013年12月日成绩: 1 实验目的 1.理解和掌握软件工程的设计理念与设计方法。 2.掌握某种数据库管理以及可视化编程环境,掌握基于某种编程语言的信息系统或网络通信软件或某种通用总线接口的通信软件的开发设计方法。 2 实验题目及要求 题目:TCP服务器与客户端软件 本题目要求使用TCP协议实现若干台电脑之间的通信。 1.任何一台电脑都具有收发信息功能。 2.具有记录查询通信纪录的功能。 3.有图形化界面。 4. 服务器可同时与多个客户端通信。分别实现服务器和客户端的程序。

学院:信电学院班级:电信102 姓名:公维蒙学号:2010081266 课程:应用软件综合实验实验日期:2013年12月日成绩: 3 实验系统设计 3.1 需求分析: 本次实验的题目是TCP服务器与客户端软件,本题目要求使用TCP协议实现若干台电脑之间的通信。软件针对局域网内部用户,实现用户间的即时通信。需要分别实现服务器端和客户端的软件设计,并有图形化界面。 服务器端负责监听用户连接请求,负责连接数据库存储用户信息,负责发送给用户好友信息,负责发送心跳报文检查用户在线状态并即时让用户更新好友在新信息。 客户端发起主动连接,向服务器请求登录或者注册。客户端可以修改昵称,可以加已知用户为好友(类似于MSN的好友添加功能)。客户端之间可以发起P2P模式的聊天,可以传送文件。 3.2 主要理论依据: 1.TCP——传输控制协议: TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。 TCP要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开(passive open)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程序可以将动态端口号作为本地端口使用。服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。随后,客户回复一个ACK,这样就建立了链接。 现在可以发送和接收消息了。接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。 由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。

客户端和服务器端判断请求来至微信客户端

有两种情况: client端区分 添加js代码 1.var browser={ 2. 3.versions:function(){ 4. 5.var u = https://www.360docs.net/doc/7818252496.html,erAgent, app = navigator.appVersion; 6. 7.return {//移动终端浏览器版本信息 8. 9.trident: u.indexOf('Trident') > -1, //IE内核 10. 11.presto: u.indexOf('Presto') > -1, //opera内核 12. 13.webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 14. 15.gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 16. 17.mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否 为移动终端 18. 19.ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 20. 21.android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端 或者uc浏览器 22. 23.iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者 QQHD浏览器 24. 25.iPad: u.indexOf('iPad') > -1, //是否iPad 26. 27.webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部 28. 29.}; 30. 31.}(), 32. https://www.360docs.net/doc/7818252496.html,nguage:(navigator.browserLanguage || https://www.360docs.net/doc/7818252496.html,nguage).toLowerCase() 34. 35.} 36.

客户端与服务器简单通信

南华大学 计算机科学与技术学院 实验报告 (2014~2015学年度第2学期) 课程名称TCP/IP详解 题目客户端与服务器的简单通信姓名学号 专业班级

1. 实验目的及要求 1.TCPIP协议相关的应用程序设计:如简单的QQ聊天程序. 按照软件工程的要求,进行系统分析与设计(包括:系统需求分析、设计、实现、以及测试); 2.TCPIP协议修改方面的设计:可以针对传输层、IP层、接口层某些功能的修改; 3.根据课程报告设计测试实验:实验结果必须是为了验证课程报告中分析的主要功能,要求有详细的实验过程说明,实验结果、分析总结和感想。 2.设计内容 编写两个客户端与一个服务器,通过客户端登录到服务器,将用户名保存到服务器中,选择聊天对象,并通过服务器将信息转发到另一个客户端。 3. 实验软硬件环境 freeBSD2.2.9 4.实验内容 服务端设计: 构造一个双向链表,保存用户的用户名和用户的ip:sockaddr_in 当有一个用户登录时查找链表,有该用户,更新ip地址。没有则添加到链表末尾,

选择要通信的用户的用户名,查找链表,有就给客户端提示信息,让其输入发送到要通信用户的信息,,并通过服务器转发。没有这给出提示信息,没有该用户。

客户端的设计 客户端只需用原来第一章的代码即可 实验结果 客户端发送数据给服务器 服务端截图

客户端截图 4. 总结分析 在实验中服务器能接收到客户端的信息,但在链表操作时出现错误,回去看了c语言的书还是未能解决,c语言已经忘得差不多了,代码是百度的,根据代码实现的,总之感觉到了自己几乎都不会。

一个简单的客户端与服务器通讯

Linux网络编程-简单的客户端和服务器通讯程序开发入门(2)?007-09-19 21:15:32分类:燙/C++zieckey@https://www.360docs.net/doc/7818252496.html, 简介: 本文详细介绍了Linux下B/S结构的客户端服务器通讯程序的开发入门, 其中对重要的网络函数和结构体作了详细的说明和分析, 最后给出一个简单的客户端和服务器通讯程序示例以加深理解。 2. 初等网络函数介绍(TCP) Linux系统是通过提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用, 会返回一个通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作, 这就是linux的设备无关性的好处.我们可以通过向描述符读写操作实现网络之间的数据交流. 2.1 socket int socket(int domain, int type,int protocol) domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等).?AF_UNIX只能够用于单一的Unix系统进程间通信,而AF_INET是针对Internet的, 因而可以允许在远程主机之间通信(当我们 man socket时发现 domain可选项是 PF_*而不是AF_*, 因为glibc是posix的实现所以用PF代替了AF,不过我们都可以使用的). type:我们网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等) SOCK_STREAM表明我们用的是TCP协议, 这样会提供按顺序的,可靠,双向,面向连接的比特流. SOCK_DGRAM 表明我们用的是UDP协议, 这样只会提供定长的,不可靠,无连接的通信. protocol:由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了 socket为网络通讯做基本的准备. 成功时返回文件描述符,失败时返回-1,看error可知道出错的详细情况. 2.2 bind ?一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联起来。(如果你想用listen()来侦听一定端口的 数据,这是必要一步)如果你只想用 connect(),那么这个步骤没有必要。但是无论如何,请继续读下去。 这里是系统调用 bind() 的大概: int bind(int sockfd, struct sockaddr *my_addr, int addrlen) sockfd:是由socket调用返回的文件描述符.

客户机与服务器结构和浏览器与服务器结构的区别

C/S结构,即Client/Server(客户机/服务器)结构,是软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。 B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX 技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。随着Windows 98/Windows 2000将浏览器技术植入操作系统内部,这种结构更成为当今应用软件的首选体系结构。 C/S 与 B/S 区别: Client/Server是建立在局域网的基础上的. Browser/Server是建立在广域网的基础上的. 1.硬件环境不同 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务; B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行。 2.对安全要求不同 C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息; B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群。3.对程序架构不同 C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑; B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM 推的JavaBean 构件技术等,使 B/S更加成熟。

windows 2003 server 企业版 每服务器和每客户端的含义

windows 2003 server 企业版每服务器和每客户端的含义 安装的时候可以选大点的数字,但是超过你购买的授权数量的部分就是属于盗版了。 安装以后也可以增加,在管理工具-授权中追加数量,有可能需要先在服务中启用LICENSE LOGGING服务。 每服务器认证:指允许服务可以同时有多少个并发客户端用户访问的数量; 每客户认证:指你的每个客户端都有认证许可,客户端通过这个认证访问服务器; 举例如下: 公司有两台服务器:Server1,Server2; 客户端:100台; 若你选择每服务器认证,这个你就需要为Server1,Server2各选择100个认证,共计200个认证,才能满足100个客户端同时访问; 若你选择每客户认证,你只需100个客户认证,就能满足100个客户端访问的需求; 用户可以根据自己的需求选择不同的认证方式. 将本地服务器更改为每设备或每用户授权 1.在要配置的服务器上,打开“选择授权模式”。 2. 在“产品”中,单击要更改授权模式的产品。 3.单击“每设备或每用户”。 要打开某个“控制面板”项目,请单击“开始”,单击“控制面板”,然后双击“授权”。 Web 服务器权限 可以配置IIS 指定Web 站点目录的下列权限,如读访问权限和目录浏览权限。理解Web 服务器权限和NTFS 权限之间的区别很重要。和NTFS 不同,Web 服务器权限适用于访问Web 和FTP 站点的所有用户。NTFS 权限只适用于拥有有效Windows 帐号的特定用户或用户组。NTFS 控制对服务器上物理目录的访问,而Web 和FTP 权限控制对Web 或FTP 站点上虚拟目录的访问。 如果您选择“每设备或每用户”模式,那么访问运行Windows Server 2003 家族产品的服务器的每台设备或每个用户都必须具备单独的“客户端访问许可证(CAL)”。通过一个CAL,特定设备或用户可以连接到运行Windows Server 2003 家族产品的任意数量的服务器。拥有多台运行Windows Server 2003 家族产品的服务器的公司大多采用这种授权方法。 相反,每服务器许可证是指每个与此服务器的并发连接都需要一个单独的CAL。换句话说,此服务器在任何时间都可以支持固定数量的连接。例如,如果您选择具有五个许可证的“每服务器”客户端授权模式,那么该服务器可以一次具有五个并发连接(如果每一个客户端需要一个连接,那么一次允许存在五个客户端)。使用这些连接的客户端不需要任何其他许可证。 每服务器授权模式常常是只有一台服务器的小公司的首选。在客户端计算机可能没有被授权为Windows Server 2003 家族产品的网络客户端的情况下,这种授权模式对于Internet 或远程访问服务器也很有用。可以指定并发服务器连接的最大数量并拒绝任何额外的登录请求。

WEB站点的开发可以分成客户端和服务器端两部分

?WEB站点的开发可以分成客户端和服务器端两部分,客户端主要用于显示信息内容,也就是我们浏览的WEB页面,服务器端程序的主要功能是对所需信息进行处理。 ?常用的Web客户端开发技术有HTML、XML、CSS、脚本语言等。 ?常用的WEB服务器端开发技术有JSP、ASP、PHP、https://www.360docs.net/doc/7818252496.html,等。 ?WEB客户端开发技术 ?HTML (HyperText Markup Language,超文本标记语言) ?HTML语言是一种标记语言,它通过标记来描述页面上的文字、影像、图片等内容。 ?我们可以使用任何文字编辑软件来编辑HTML代码,常用的开发软件如Dreamweaver等也都是制作HTML页面的不错选择。 ?XML(eXtensible Markup Language,可扩展标记语言) ?XML可以自定义标记,描述的是文档的结构和意义,它本身不描述文档的显示方式。 ?要想使XML文档在浏览器中按特定样式显示,必须要有相应的样式文件,如CSS文件或XSL文件等。 ?WEB客户端开发技术 ?CSS(Cascading Style Sheets,层叠样式表) CSS的主要工作就是描述WEB页面的显示风格和样式,使用它可以使得WEB页面的显示内容与显示样式分开,有利于对页面文件的维 护。 ?脚本语言 常用的脚本语言有VBScript和JavaScript,它们都是由浏览器解释执行的。 它们不仅可以作为客户端程序的开发技术,也可以应用于服务器端程序的开发。 ?WEB服务器端开发技术 ?JSP(Java Server Pages) JSP页面由HTML代码和嵌入其中的JSP代码组成,是基于Java Servlet及整个Java体系的Web开发技术。 JSP页面被客户端请求后由服务器对该JSP代码进行处理,然后将运行结果返回给客户端的浏览器。 ?ASP(Active Server Pages) 通过ASP我们可以将HTML、ASP指令和ActiveX组件结合以建立动态交互而且高效的Web服务器应用程序。 ?WEB服务器端开发技术 ?PHP(Personal HomePage tools) PHP语法借鉴了C、Java和Perl等语言,它可以嵌入到HTML中,更好地对页面进行控制。 ?https://www.360docs.net/doc/7818252496.html, https://www.360docs.net/doc/7818252496.html,是.NET架构的一部分,它提供了在分布环境下进行Web

客户端与服务器

客户端到服务器端的通信过程 https://www.360docs.net/doc/7818252496.html,/84448/ 2015/02/20 ·开发· 5.3K 阅读· .Net, socket 分享到:41 ?与《YII框架》不得不说的故事—高效篇 ?Unity3D快速入门 ?SQL Server基础--T-SQL语句 ?PHPExcel探索之旅 原文出处:碧雪轩的博客欢迎分享原创到伯乐头条 学习任何东西,我们只要搞清楚其原理,就会触类旁通。现在结和我所学,我想总结一下客户端到服务器端的通信过程。只有明白了原理,我们才会明白当我们程序开发过程中错误的问题会出现在那,才会更好的解决问题。 我们首先要了解一个概念性的词汇:Socket socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)socket非常类似于电话的插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码可以当作是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码(IP地址),相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接,通信完成。

以上通信是以两个人通话做为事例来在概的说明了下通信,但是现在假如通信中的一个人是外国人(说英语),一个人是中国人(说普通话),他们俩相互通信的话,都不能听明白对方说的是什么,那么他们的沟通就不能够完成。但是如果我们给一个规定,给通话双方,只能讲普通话,那么双方沟通就没有障碍了。这就引出来了通信协议。 有两种类型:(Tcp协议与Udp协议): Tcp协议与Udp协议是在两硬件设备上进行通信传输的一种数据语法。 –流式Socket(STREAM): 是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;Tcp:是以流的形式来传的。 –数据报式Socket(DATAGRAM): 是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.Udp:将数据包拆开为若干份编号后来传输。在传输的过程中容易出现数据的丢失。但是传输速度要比TCP的快。 Socket的通信流程 Demo:

相关文档
最新文档