文档章节

C#网络通信

t
 tjxy9rjxl3QP
发布于 2017/08/01 16:21
字数 800
阅读 1
收藏 0
点赞 0
评论 0

内容很好,可以直接使用,内容所有权属于:htpp://www.xinduofen.com/

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

using System.Net;

using System.IO;

 

namespace www.xinduofen.cn

{

    /// <summary>

    /// C#与http网站进行对接的工具类

    /// </summary>

    class HttpWebTool

    {

        /// <summary>

        /// 用于缓存网站端传输到客户端的SESSIONID或者JSESSIONID

        /// </summary>

        private Cookie sessionidCookie = null;

        

        /// <summary>

        /// 从HttpWebServer端获取数据(使用的是"post"方式)

        /// </summary>

        /// <param name="url">请求网址</param>

        /// <param name="data">请求参数集合,无需参数时传入null值</param>

        /// <param name="cookies">请求cookie集合,无需cookie时传入null值</param>

        /// <returns>返回请求结果字符串,返回为null代表请求失败</returns>

        public String getDatafromHttpWebServer(String url, Hashtable data,CookieCollection cookies)

        {

            String result = null;

 

            if (string.IsNullOrEmpty(url))

            {

                return null;//传入参数异常

            }

            byte[] data_stream = null;//将要向WEB端传输的数据流内容

            if (data != null && data.Count > 0)

            {

                string transportData = "";//将要向WEB端传输的字符串内容

                foreach (DictionaryEntry de in data)

                {

                    transportData = transportData + de.Key.ToString() + "=" + de.Value.ToString() + "&";//解调出键值对数据

                }

                transportData = transportData.TrimEnd('&');//去除字符串尾部的 &

                if (!string.IsNullOrEmpty(transportData))

                {

                    data_stream = Encoding.UTF8.GetBytes(transportData);//将上传字符串数据打包成数据流

                }

            }

 

 

            try

            {

                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);

                //请求方式

                req.Method = "POST";

                //声明客户端只接收txt类型的内容

                req.Accept = "text/plain";

                //以键值对形式向WEB端传递参数

                req.ContentType = "application/x-www-form-urlencoded";

                //设置cookie盒子(客户端请求的cookie和WEB端返回的cookie就放在此盒子中)

                CookieContainer cookieContainer = new CookieContainer();

                if (sessionidCookie != null && !string.IsNullOrEmpty(sessionidCookie.Domain))

                {

                    cookieContainer.Add(sessionidCookie);

                }

                if (cookies!=null)

                {

                    cookieContainer.Add(cookies);//添加调用者传入的cookie集合

                }

                req.CookieContainer = cookieContainer;

                if (data_stream != null && data_stream.Length > 0)

                {

                    //请求数据流的长度

                    req.ContentLength = data_stream.Length;

                    using (Stream requestStream = req.GetRequestStream()) {

                        //写入请求实体流

                        requestStream.Write(data_stream, 0, data_stream.Length);

                    }

                }

                //接收返回值

                using(HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse()){

                    using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8))

                    {

                        result = reader.ReadToEnd().Trim();

                    }

                    if (myResponse.Cookies["SESSIONID"] != null)

                    {

                        sessionidCookie = myResponse.Cookies["SESSIONID"];

                    }

                    else

                    {

                        if (myResponse.Cookies["JSESSIONID"] != null)

                        {

                            sessionidCookie = myResponse.Cookies["JSESSIONID"];

                        }

                    }

                }

                

            }catch(Exception){

                Console.WriteLine("请查看传入参数是否正确或者WEB端是否关闭");

            }

 

            return result;

        }

        /// <summary>

        /// 获得参数data的消息数据流,以"\r\n"结尾

        /// </summary>

        /// <param name="data">请求参数集合,无需参数时传入null值</param>

        /// <param name="boundary">消息分隔符</param>

        /// <returns>返回参数data的数据流,返回为空代表获得失败</returns>

        private byte[] getParameterBytes(Hashtable data, String boundary)

        {

            byte[] parameterBytes = null;

 

            //如果有请求参数

            if (data != null && data.Count > 0)

            {

                string parameterStr = "";

                foreach (DictionaryEntry de in data)

                {

                    parameterStr += "--" + boundary;

                    parameterStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"";

                    parameterStr += "\r\n" + "Content-Type: text/plain; charset=UTF-8";

                    parameterStr += "\r\n\r\n" + de.Value.ToString();

                    parameterStr += "\r\n";

                }

                if (!string.IsNullOrEmpty(parameterStr))

                {

                    parameterBytes = Encoding.UTF8.GetBytes(parameterStr);//将上传字符串数据打包成数据流

                }

            }

 

            return parameterBytes;

        }

        /// <summary>

        /// 获得上传文件的消息头部分字符流,以"\r\n\r\n"结尾

        /// </summary>

        /// <param name="de">上传文件《控件名,上传文件的保存位置(包括"文件名"."扩展名")》</param>

        /// <param name="boundary">消息分隔符</param>

        /// <returns>返回上传文件的消息头部分字符流,返回会为null代表获得失败</returns>

        private byte[] getUploadFileDeclareBytes(DictionaryEntry de, String boundary)

        {

            byte[] uploadFileDeclareBytes = null;

 

            //上传文件的消息头描述部分

            string uploadFileDeclareStr = "";

            uploadFileDeclareStr += "--" + boundary;

            uploadFileDeclareStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"; filename=\"" + de.Value.ToString() + "\"";

            uploadFileDeclareStr += "\r\n" + "Content-Type: application/octet-stream";

            uploadFileDeclareStr += "\r\n\r\n";

            if (!string.IsNullOrEmpty(uploadFileDeclareStr))

            {

                uploadFileDeclareBytes = Encoding.UTF8.GetBytes(uploadFileDeclareStr);//将上传字符串数据打包成数据流

            }

 

 

            return uploadFileDeclareBytes;

        }

 

 

    }

}

内容所有权属于:越康体育(专业研究体质健康测试仪器体质测试仪

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 3
码字总数 2851
作品 0
常州
Windows Mobile 开发系列文章收藏 - GPRS/上网设置

Windows Mobile 开发系列文章收藏 - GPRS基础知识/应用开发/上网设置. GPRS入门知识 GPRS、WAP、CDMA GPRS网络总体结构 GPRS基本知识问答 GPRS类型一览 GPRS简介 GPRS特点 GPRS开发系列文章 ...

长征2号
2017/09/08
0
0
网络游戏底层通信框架--cocosocket

cocosocket 是一个为 cocos2d-x 和 unity 3D 手机网络游戏准备的底层通信框架,满足网络游戏对于高性能网络通信的需求,适用于基于socket的手机网游等应用 cocosocket包含三个部分:c++客户端...

beykery
2015/07/30
2.2K
0
C# WinForm开发系列 - Socket/WCF/Rometing/Web Services

当今社会是一个信息化社会, 网络越来越多地影响人民的生活, 带来巨大的便利性; 而网络通信在软件开发中占据相当大的比重. Socket/WCF/Rometing/Web Services 各种技术纷至踏来, 应用广泛; 而...

长征2号
2017/08/11
0
0
【C#每日一帖】初识.NET和C#

了解.NET与C# 1 .NET 是一个开发平台,它定义了一种公用语言子集(Common Language Subset,CLS),这是一种为符合其规范的语言和类库之间提供无缝集成的混合语言。.NET统一了编程类库,提供...

c_o_d_e_r
2011/07/14
0
1
C#网络编程系列文章(二)之Socket实现同步TCP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编...

zhujunxxxxx
2015/03/14
0
0
cs架构的游戏平台,不同语言开发如何通信

比如服务器端用go或者c,python等底层语言开发的平台,客户端用其他语言来写,比如c#或者Java,那么应当如何通信呢。注意是游戏平台,要实时通信的。http协议,json,xml就不要说了。 有人说...

西二旗板报
2012/05/22
1K
11
c#开发大全、系列文章、精品教程

全栈工程师开发手册 (作者:栾鹏) c#系列教程: c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象 c#文件夹常用操作,属性设置,遍历、压缩 c#获取网页源代码的5种方式...

luanpeng825485697
2017/10/03
0
0
C# 使用多线程如何传递两个以上参数的实现方法(附示例)

某些情况下当我们启动一个线程的时候会向该线程传递参数,有时除了功能上需要之外,我觉得还有就是为了我们能管理好启动的线程组(当然,只开一两个线程什么的也谈不上不好管理了,我说的线程...

余二五
2017/11/15
0
0
java netty 服务端向客户端发送16进制数据,客户端无法接收-已解决

项目中需要通过netty与C语言建立连接,双方是通过16进制进行数据传输 本案例主要介绍如何在JavaNetty与C#Sokcet进行字符串通信,Java服务端,C#客户端。 重点提示:网络通信中都是byte字节,...

yqwang75457
2017/06/29
0
0
.net 高性能异步、同步通信库--Bouyei.NetProviderFactory

c# 高性能大并发 socket 异步、同步通信库,建立独立的发送缓冲池和接收缓冲池解决发送和接收不断分配缓冲区问题,主要功能模块: tcp客户端和服务端,客户端分为同步和异步通信连接; udp客...

bouyeijiang
2017/07/30
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部