webclient post一次数据,为何服务器出现了几次数据

webclient post一次数据,为何服务器出现了几次数据,第1张

因为socket有两种连接方式:TCP与UDP,各有特点,不知你用了哪种,TCP传输可靠,UDP不可靠会丢失包,但UDP包有原路返回的特点,特别适合QQ这种的即时聊天工具。你用TCP试试,不会丢失包的。

客户端有个文件存放用户数据,想将它压缩后发送到服务端保存,然后其他客户端通过向服务端请求获取文件数据替换本地文件。实现用户数据同步。

using (WebClient wc = new WebClient())

{

wc.UploadFile(上传文件的url, 本地文件的名称)

}

C#中post用法如下:

首先,POST请求会把请求的数据放置在HTTP请求包的包体中。

其次,POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

最后,POST的安全性较高。

通过C#post文件流的如下代码为:

using System

using System.Collections.Generic

using System.Collections.Specialized

using System.IOusing System.Net

using System.Text

public class HttpPost{

/// <summary>    ///

以Post 形式提交数据到 uri

/// </summary>    ///

<param name="uri">

</param>

/// <param name="files">

</param>

/// <param name="values"></param>

/// <returns></returns>

public static byte[] Post(Uri uri, IEnumerable<UploadFile>files, NameValueCollection values)    {

string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x")

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri)

request.ContentType = "multipart/form-databoundary=" + boundary

request.Method = "POST"

request.KeepAlive = true

request.Credentials = CredentialCache.DefaultCredentials

MemoryStream stream = new MemoryStream()

byte[] line = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n")

//提交文本字段

if (values != null)

{

string format = "\r\n--" + boundary + "\r\nContent-Disposition: form-dataname=\"{0}\"\r\n\r\n{1}"

foreach (string key in values.Keys)

{

string s = string.Format(format, key, values[key])

byte[] data = Encoding.UTF8.GetBytes(s)

stream.Write(data, 0, data.Length)

}

stream.Write(line, 0, line.Length)        }

//提交文件

if (files != null)

{

string fformat = "Content-Disposition: form-dataname=\"{0}\"filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n"

foreach (UploadFile file in files)

{                string s = string.Format(fformat, file.Name, file.Filename)

byte[] data = Encoding.UTF8.GetBytes(s)

stream.Write(data, 0, data.Length)

stream.Write(file.Data, 0, file.Data.Length)

stream.Write(line, 0, line.Length)

}        }

request.ContentLength = stream.Length

Stream requestStream = request.GetRequestStream()

stream.Position = 0L

stream.CopyTo(requestStream)

stream.Close()

requestStream.Close()

using (var response = request.GetResponse())

using (var responseStream = response.GetResponseStream())

using (var mstream = new MemoryStream())

{            responseStream.CopyTo(mstream)

return mstream.ToArray()        }    }

/// <summary>    /// 上传文件

/// </summary>

public class UploadFile

{

public UploadFile()

{

ContentType = "application/octet-stream"        }

public string Name { getset}

public string Filename { getset}

public string ContentType { getset}

public byte[] Data { getset}    }}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11672642.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存