python客户端与服务器端通信数据库原理_js 客户端与服务器端的通信

客户端与服务器端通信一般有两种方法,隐藏iframe和使用xmlhttp对象

隐藏框架技术实现Ajax通常由4个过程组成。第一步是由用户的某种行为引发了一个对隐藏框架的请求。这包括用户单击了在可见框架页中的超链接,或者由用户的其他交互行为所引发。通常情况下,对隐藏框架页的请求仅仅是将隐藏框架页重定向到一个服务器上指定的服务端程序。对隐藏框架页的重定向将自动触发第二个过程:即向服务器发送请求。

在服务器程序完成了对请求的处理之后,将发生第三个过程:即服务器将响应发送回隐藏框架页。服务器端的响应是一个Web页面,该页面将被发送给隐藏框架。当来自服务器的响应被完全接收后,隐藏框架中的Web页面将发起与可见框架页的联系,并告知可见框架,服务器的响应已经成功。这就是第四个过程,该过程通常在隐藏框架的window.onload事件处理器中完成。

例子:

客户端代码:

[javascript]

view plain

copy

var oHiddenFrame=null;

function getServerInfo()

{

if(oHiddenFrame==null)

{

oHiddenFrame=document.createElement("iFrame");

oHiddenFrame.name="hiddenFrame";

oHiddenFrame.id="hiddenFrame";

oHiddenFrame.style.height="0px";

oHiddenFrame.style.width="0px";

oHiddenFrame.style.position="absolute";

oHiddenFrame.style.visibility="hidden";

document.body.appendChild(oHiddenFrame);

}

setTimeout(function(){frames["hiddenFrame"].location.href="aa.aspx";},10);

}

function handleResponse(sResponseText)

{

alert("服务器回应的消息是:"+sResponseText);

}

HTML

[xhtml]

view plain

copy

点击按键通过隐藏框架向服务器发出请求

服务器端响应的WEB页面aa.aspx

[javascript]

view plain

copy

window.οnlοad=function()

{

parent.handleResponse("bb")

}

使用xmlhttp

xmlHttp是微软创建的额对象,它的本质是添加额外的用于发送和接收XML代码的功能的普通的HTTP请求。

当一个xmlHttp对象把一个http发送到服务器端,将经历若干种状态,而readyState这是描述这样它的一系列状态的一个属性值

取值   描述

0       描述一种“为初始化”状态,此时,已经创建一个xmlHttp对象,但是还没有对它初始化

1       描述一种“准备发送”状态,此时,xmlHttp对象已经调用open()方法打开一个请求,并且xmlHttp对象准备把这个请求发送到出去

2       描述一种“发送”状态,此时,xmlHttp对象已经调用send()方法将请求发送出去,但是还没有从服务器端得到相应。

3       描述一种“正在接收”状态,此时,已收到HTTP相应头部信息,但是,消息体部分还没有完全接收

4       描述一种“已加载”状态,此时,相应已经被完全接受。

responseText属性

这个属性包含客户端接收到的HTTP响应的文本内容,当readyState属性为0,1,2时,responseText为空字符串,当为3时,包含部分响应信息,当readyState为4时,包含完整的相应信息。

responseXML属性

此responseXML属性用于当接收到完整的HTTP响应时(readyState为4)描述XML响应;此时,Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾。如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。无论何时,只要readyState值不为4,那么该responseXML的值也为null。

其实,这个responseXML属性值是一个文档接口类型的对象,用来描述被分析的文档。如果文档不能被分析(例如,如果文档不是良构的或不支持文档相应的字符编码),那么responseXML的值将为null。

statusText属性

这个属性描述了HTTP状态代码文本,当且仅当readyState的值为3或4时才可用,当readySate为其它值时如果试图读取statusText将引发一个异常

abort()方法

可以使用该方法来取消一个http请求,从而把xmlHttp对象复位到为初始化状态

open()方法

打开一个请求,通常包括三个参数,提交方式:get和post,请求的URL,判断同步还是异步请求的布尔值,同步为false,异步为true.

send()方法

发送一个请求。xmlHttp对象调用send方法后,通常讲readyState属性从1变为2.它通常包含一个参数,当使用get请求时,该参数可以为空,当使用post请求时,该参数通常是请求发送的参数的字符串。

setRequestHeader()方法

该setRequestHeader(DOMString header,DOMString value)方法用来设置请求的头部信息。当readyState值为1时,你可以在调用open()方法后调用这个方法;否则,你将得到一个异常。

getResponseHeader()方法

getResponseHeader(DOMString header,value)方法用于检索响应的头部值。仅当readyState值是3或4(换句话说,在响应头部可用以后)时,才可以调用这个方法;否则,该方法返回一个空字符串。

getAllResponseHeaders()方法

该getAllResponseHeaders()方法以一个字符串形式返回所有的响应头部(每一个头部占单独的一行)。如果readyState的值不是3或4,则该方法返回null。

例子。。验证一个用户名是否存在

客户端代码

[javascript]

view plain

copy

var request;

function createXMLHTTP()

{

if(window.XMLHttpRequest)

{

returnnew XMLHttpRequest();

}

elseif(window.ActiveXObject)

{

try

{

returnnew ActiveXObject("MSXML2.XMLHTTP");

}

catch(oException)

{

returnnew ActiveXObject("Microsoft.XMLHTTP");

}

}

else

{

thrownew Error("not exists");

}

}

function checkUsername()

{

var userValue=document.getElementById("username").value;

if(userValue=="")

{

alert("Please enter a user name to check!")

return;

}

var url="bb.aspx?username="+userValue;

request=createXMLHTTP();

request.open("get","bb.aspx","true");

request.onreadystatechange=function()

{

if(request.readyState==4)

{

alert(request.responseText)

checkUsername_callBack(request.responseText);

}

}

request.send(null);

}

function checkUsername_callBack(sResponseText)

{

var userValue=document.getElementById("username").value;

if(sResponseText=="available")

{

alert("username:"+userValue+" is  available!");

}

else

{

alert("username:"+userValue+" is not available!");

}

}

[xhtml]

view plain

copy

UserName

服务器端bb.aspx代码

[c-sharp]

view plain

copy

protectedvoid Page_Load(object sender, EventArgs e)

{

string username = Request.QueryString["username"];

if ("aa" == username || "bb" == username)

{

Response.Write("available");

}

//else

//{

//    Response.Write(username);

//}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以,但是需要注意以下几点: 1. 确保两端使用的编程语言相同或兼容。 2. 确保代码的可读性和可维护性,使用清晰易懂的变量名和注释。 3. 遵循良好的编程规范和最佳实践,如代码复用、异常处理、安全性等。 4. 确保代码没有潜在的漏洞或安全隐患。 5. 在开发过程中及时测试和调试,确保代码的正确性和稳定性。 总之,编写优秀的代码需要综合考虑各种因素,而不仅仅是语言的选择和熟练程度。 ### 回答2: 可以将服务器和客户端的代码都写出来,但是具体的实现方式和代码内容会取决于所使用的编程语言和框架。 对于服务器端代码,通常会涉及到处理请求、数据库操作、业务逻辑等方面。以下是一个使用Node.js和Express框架的简单示例: ``` const express = require('express'); const app = express(); app.get('/api/data', (req, res) => { // 从数据库中获取数据 const data = fetchDataFromDatabase(); // 处理数据 const processedData = processData(data); // 返回处理后的数据给客户端 res.json(processedData); }); // 启动服务器 app.listen(3000, () => { console.log('服务器已启动'); }); ``` 对于客户端代码,可以使用浏览器端的JavaScript或移动端的原生语言(如Java、Swift等)来实现。以下是一个简单的使用JavaScript和Fetch API的示例: ``` fetch('/api/data') .then(response => response.json()) .then(data => { // 在客户端处理数据 processDataOnClient(data); // 更新页面内容 updateUI(data); }) .catch(error => { console.error('请求数据时出错', error); }); ``` 这只是一个简单的代码示例,实际的代码会因具体需求和技术栈的不同而有所差异。在开发时,可以根据具体情况选择适合的编程语言和框架,并根据需求编写对应的服务器和客户端代码。 ### 回答3: 不好意思,由于字数的限制,我无法在300字内为您提供完整的服务器和客户端的代码。不过,我可以给您提供一个基本的示例来理解这两者之间的交互方式。 假设我们要实现一个简单的客户端服务器端通信功能,以客户端发送一条信息给服务器为例。 首先,我们需要在服务器端写一个监听某个特定端口的代码,以便能够接收来自客户端的请求。例如,使用Python的socket模块可以这样写服务器端代码: ```python import socket def server(): host = 'localhost' # 服务器 IP 地址 port = 12345 # 监听端口 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) print('服务器已启动,等待连接...') conn, addr = s.accept() print('连接已建立。地址:', addr) data = conn.recv(1024).decode() # 接收客户端发送的消息 print('接收到的消息:', data) conn.close() if __name__ == '__main__': server() ``` 接下来,我们可以写一个客户端的代码,它将连接到服务器并发送一条消息。同样使用Python的socket模块,客户端代码可以如下所示: ```python import socket def client(): host = 'localhost' # 服务器 IP 地址 port = 12345 # 服务器监听端口 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) message = 'Hello, server!' # 要发送的消息 s.sendall(message.encode()) s.close() if __name__ == '__main__': client() ``` 以上是一个简单的示例,它演示了客户端服务器端的代码实现。然而,实际开发一个完整的服务器和客户端应用程序会更加复杂,涉及到更多的功能和细节处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值