只作为个人学习笔记。

 class OpData
{ // 创建一个和客户端通信的套接字
Socket socketwatch = null;
//连接Access字符串
string strCon;
OleDbConnection myCon;
public TcpListener link(NetChgbCientr.Form1.Updata ud)
{
//定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
socketwatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//服务端发送信息需要一个IP地址和端口号
IPAddress address = IPAddress.Parse("192.168.1.112");
TcpListener tls = new TcpListener(address, );
tls.Start();
Connect(); //连接数据库
ud("服务已启动!\n");
return tls;
} //服务启动 - - 连接数据库
public void Connect()
{
strCon = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source =
D:\project\NEWPROJECT\NetChgbServer\bin\Debug\Data2.mdb"; //地址改为全路径
//实例化连接数据库对象
myCon = new OleDbConnection(strCon);
//开启连接
myCon.Open();
} //查询全部数据json格式传个客户端
public DataSet Query(String strCom)
{
// String strCom = "SELECT * FROM CHGB";
//实例化数据集
DataSet myDataSet = new DataSet();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myCon);
myCommand.Fill(myDataSet, "CHGB");
if (myDataSet != null && myDataSet.Tables.Count > )//判断得到的是不是null或没有数据的
{
return myDataSet; }
else
{
DataSet DS = new DataSet();
return DS; }
} }
  //业务逻辑
class BllData
{
TcpListener tls;
// 创建一个和客户端通信的套接字
Socket socketwatch = null;
OpData Od = new OpData();
Dictionary<string, Socket> clientConnectionItems = new Dictionary<string, Socket> { }; //启动服务器
public void Open(NetChgbCientr.Form1.Updata ud)
{
tls = Od.link(ud);
//负责监听客户端的线程:创建一个监听线程
Thread threadwatch = new Thread(watchconnecting);
threadwatch.IsBackground = true;
//启动线程
threadwatch.Start(ud); } //查询全部数据--json转换 public void QueryAll()
{
DataSet ds = new DataSet();
List<CHGB> lis = new List<CHGB>();
String strCom = "SELECT * FROM CHGB";
ds = Od.Query(strCom); //返回查询结果
//判断是不是空数据
if (ds == null || ds.Tables.Count <= || ds.Tables[].Rows.Count <= )
{
return;
}
//有数据继续往下执行
for (int i = ; i < ds.Tables.Count; i++)
{
foreach (DataRow dts in ds.Tables[i].Rows)
{
CHGB ch = new CHGB();
ch.JH1 = dts[].ToString();
ch.QSJS1 = dts[].ToString();
ch.ZZJS1 = dts[].ToString();
ch.HD1 = dts[].ToString();
ch.SB1 = dts[].ToString();
ch.SND1 = dts[].ToString();
ch.CZ1 = dts[].ToString();
ch.HD21 = dts[].ToString();
ch.JSJG1 = dts[].ToString();
lis.Add(ch);
}
}
string ja = JsonConvert.SerializeObject(lis); //json序列化,直接将取出来的表格拆分成对象存入集合中,在用下面的方法序列化
this.Send(ja);
} //监听客户端发来的请求
public void watchconnecting(object ud)
{
//tcpClient是socket的封装(tcpclient.client()方法可以得到socket
TcpClient remoteClient = null;
//持续不断监听客户端发来的请求
while (true)
{
try
{
remoteClient = tls.AcceptTcpClient();
}
catch (Exception ex)
{
//提示套接字监听异常
MessageBox.Show(ex.Message);
break;
} //获取客户端的IP和端口号
IPAddress IP = (remoteClient.Client.RemoteEndPoint as IPEndPoint).Address;
int Port = (remoteClient.Client.RemoteEndPoint as IPEndPoint).Port; //让客户显示"连接成功的"的信息
string sendmsg = "连接服务端成功!\r\n" + "本地IP:" + IP + ",本地端口" + Port;
byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendmsg);
remoteClient.Client.Send(arrSendMsg);
//给外面也弄个套接字
socketwatch = remoteClient.Client;
//客户端网络结点号
string remoteEndPoint = remoteClient.Client.RemoteEndPoint.ToString();
//显示与客户端连接情况
String str = "成功与" + remoteEndPoint + "客户端建立连接!\t\n";
//添加客户端信息
NetChgbCientr.Form1.Updata ifu = (NetChgbCientr.Form1.Updata)ud;
ifu(str);
clientConnectionItems.Add(remoteEndPoint, remoteClient.Client); //IPEndPoint netpoint = new IPEndPoint(clientIP,clientPort);
IPEndPoint netpoint = remoteClient.Client.RemoteEndPoint as IPEndPoint; ArrayList li = new ArrayList();
li.Add(remoteClient.Client);
li.Add(ud); //创建一个通信线程 收
ParameterizedThreadStart pts = new ParameterizedThreadStart(recv);
Thread thread = new Thread(pts);
//设置为后台线程,随着主线程退出而退出
thread.IsBackground = true;
//启动线程
thread.Start(li);
}
} // 接收客户端发来的信息,客户端套接字对象
public void recv(object li)
{
Socket socketServer = (li as ArrayList)[] as Socket; while (true)
{
//创建一个内存缓冲区,其大小为1024*1024字节 即1M
byte[] arrServerRecMsg = new byte[ * ];
//将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
try
{
//获取长度判断请求
int length = socketServer.Receive(arrServerRecMsg); switch (length)
{
case : this.QueryAll();
break;
case : MessageBox.Show("还没写 显示一条");
break;
} //将机器接受到的字节数组转换为人可以读懂的字符串
//string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);
//将发送的字符串信息附加到文本框txtMsg上
//NetChgbServer.Form1.Updata inc = (li as ArrayList)[1] as NetChgbServer.Form1.Updata;
//inc("客户端:" + socketServer.RemoteEndPoint + ",time:" + GetCurrentTime() + "\r\n" + strSRecMsg + "\r\n\n");
}
catch (Exception ex)
{
clientConnectionItems.Remove(socketServer.RemoteEndPoint.ToString()); MessageBox.Show("Client Count:" + clientConnectionItems.Count); //提示套接字监听异常
MessageBox.Show("客户端" + socketServer.RemoteEndPoint + "已经中断连接" + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n");
//关闭之前accept出来的和客户端进行通信的套接字
socketServer.Close();
break;
}
}
} //发送消息给客服端
public void Send(String Ja)
{ //将输入的内容字符串转换为机器可以识别的字节数组
byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(Ja);
//调用客户端套接字发送字节数组
socketwatch.Send(arrClientSendMsg);
} }
 public partial class Form1 : Form
{
public delegate void Updata(string s);
ViShow Vs = new ViShow();
public Form1()
{
InitializeComponent();
}//启服务
private void Open_Click(object sender, EventArgs e)
{ Updata ud = new Updata(UpdateLabel2);
Vs.ViOpen(ud); } private void text1_TextChanged(object sender, EventArgs e)
{ } //主线程外访问控件
private void UpdateLabel2(String str)
{ if (text1.InvokeRequired)
{
// 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它
Action<string> actionDelegate = (x) => { text1.AppendText(x.ToString()); };
// 或者
// Action<string> actionDelegate = delegate(string txt) { this.label2.Text = txt; };
text1.Invoke(actionDelegate, str);
}
else
{
text1.AppendText(str);
}
} }
  public partial class Form1 : Form
{
Thread threadclient = null;
Socket socketclient = null;
int sign;
public Form1()
{
InitializeComponent();;
} //DataShow 容器
private void DataShow_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ } //显示全部数据按钮 ShowAll
private void button1_Click(object sender, EventArgs e)
{
sign = ;
//将输入的内容字符串转换为机器可以识别的字节数组
byte[] arrClientSendMsg = Encoding.UTF8.GetBytes("");
//调用客户端套接字发送字节数组
socketclient.Send(arrClientSendMsg); } //连接服务器
private void butt2_Click(object sender, EventArgs e)
{
//定义一个套接字监听
socketclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //获取文本框中的IP地址
IPAddress address = IPAddress.Parse("192.168.1.112"); //将获取的IP地址和端口号绑定在网络节点上
IPEndPoint point = new IPEndPoint(address, );
try
{
//客户端套接字连接到网络节点上,用的是Connect
socketclient.Connect(point); sign = ;
}
catch (Exception)
{
MessageBox.Show("连接失败\r\n");
return;
}
threadclient = new Thread(recv);
threadclient.IsBackground = true;
threadclient.Start();
} // 接收服务端发来信息的方法
void recv()
{
//持续监听服务端发来的消息
while (true)
{
//定义一个1M的内存缓冲区,用于临时性存储接收到的消息
byte[] arrRecvmsg = new byte[ * ]; //将客户端套接字接收到的数据存入内存缓冲区,并获取长度
int length = socketclient.Receive(arrRecvmsg); //将套接字获取到的字符数组转换为人可以看懂的字符串
string strRevMsg = Encoding.UTF8.GetString(arrRecvmsg, , length);
            Control.CheckForIllegalCrossThreadCalls = false;  //这里不允许这样操作访问控件,这里为了测试方便
if (sign == )
{
MessageBox.Show(strRevMsg);
this.butt2.Text = "断开连接";
sign = ;
}
else
{
MessageBox.Show(strRevMsg);
List<CHGB> list = JsonConvert.DeserializeObject<List<CHGB>>(strRevMsg); //先给DataSource 一个地址,再把list给DataGridView控件
//不给地址会报 ”引用没有作用到实例上“
DataTable dt = new DataTable();
this.DataShow.DataSource = dt;// list;
this.DataShow.DataSource = list;
} }
}

日笔记--C# 从数据库取表格到DataGridView---json传输的更多相关文章

  1. C#——数据库取数据,DataGridView显示数据

    使用未封装的方法连接数据库 步骤: 一.确定连接方式(以SqlServer为例): ①Windows身份验证. string ConnectionType = "server=.;datab ...

  2. C#程序中从数据库取数据时需注意数据类型之间的对应,int16\int32\int64

    private void btn2_Click(object sender, RoutedEventArgs e)         {             using (SqlConnection ...

  3. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  4. 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

    登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...

  5. SQLMAP学习笔记2 Mysql数据库注入

    SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...

  6. C#读写Access数据库、表格datagridview窗体显示代码实例

    C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...

  7. 爬取表格类网站数据并保存为excel文件

    本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...

  8. 【python爬虫和正则表达式】爬取表格中的的二级链接

    开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...

  9. 简易数据分析 11 | Web Scraper 抓取表格数据

    这是简易数据分析系列的第 11 篇文章. 今天我们讲讲如何抓取网页表格里的数据.首先我们分析一下,网页里的经典表格是怎么构成的. First Name 所在的行比较特殊,是一个表格的表头,表示信息分类 ...

随机推荐

  1. mybatis“$”和“#”

    摘要:$ 是直接拼接# 会转义,更安全 类比Mybatis的执行流程和JDBC原有的我们使用的方法就是:Mybatis: Sqlsession -> Executor -> Stateme ...

  2. Oracle NVL与NVL2函数

    nvl( ) 函数 从两个表达式返回一个非 null 值. 语法 NVL(eExpression1, eExpression2) 参数 eExpression1, eExpression2 如果 eE ...

  3. Python单例模式实现方法

    一  简介 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源 ...

  4. 超文本传输协议http详解

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  5. yii mailer 扩展发送邮件

    // 将mailer扩张放到 yii 的extension目录下 $message = 'Hello World!'; $mailer = Yii::createComponent('applicat ...

  6. 创建django的8大步骤xxx.setAttribute('name', 'user'); 添加属性和值 xxx.attr('name') 查看属性的值 $(xxx).addClass 添加样式 $().after() 添加在标签后面

    第一步.创建django 方法一:django-admin startproject 方法二: 直接在python上创建 第二步:创建工程名cmdb python manage.py startapp ...

  7. window 10 下解压缩版MySQL5.7.24的安装

    安装步骤: 1.下载mysql-5.6.40-winx64.zip https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip ...

  8. 11 MySQL--Navicat与pymysql模块

    1.Navicat的安装下载 一.Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时, 可以使用可视化工具Navicat,以图形界面的形式操作My ...

  9. Android gralloc 模块实例

    本文实例为借鉴 http://www.ixueyi.com/jingyan/1865079.html 该文档后所写.主要是android的gralloc操作显存的模块实例,如有不正确的地方欢迎指出谢谢 ...

  10. Configure、中间件与ErrorHandlingMiddleware全局异常捕获

    一.Configure Startup.cs中的Configure方法主要是http处理管道配置.中间件和一些系统配置,其中 IApplicationBuilder: 定义一个类,该类提供配置应用程序 ...