我在客户端有许多条记录要上传到服务器上.
OleDbCommand cmd = new OleDbCommand("select * from images", sysConn.conn);
OleDbDataReader dr = cmd.ExecuteReader();
string[] str = new string[7];
string strSender;
TcpClient client = new TcpClient("192.168.1.168", 8181);
if (dr.HasRows)
{
while (dr.Read())
{
NetworkStream ns = client.GetStream();
//在这里发送或接收
str[0] = dr[0].ToString();
str[1] = dr[1].ToString();
str[2] = dr[2].ToString();
str[3] = dr[3].ToString();
str[4] = dr[4].ToString();
str[5] = dr[5].ToString();
str[6] = dr[6].ToString();
strSender = String.Join(",", str);
byte[] bStr = System.Text.Encoding.BigEndianUnicode.GetBytes(strSender);
}
}
假如有三条记录.我想一条一条的发往服务器.可以现在服务器端接收的时候是把三条记录一下全部接收了.怎么回事!服务器代码: int porNum = 8181;
bool done = false;
IPAddress ip = Dns.GetHostAddresses(Dns.GetHostName())[0];
TcpListener listener = new TcpListener(ip, porNum);
listener.Start();
while (!done)
{
Console.Write("正在侦听81端口...");
TcpClient client = listener.AcceptTcpClient(); Console.WriteLine(" 处理连接请求...");
NetworkStream ns = client.GetStream();
//ns.Read(,0,);
byte[] bytes = new byte[1024];
int bytesRead = ns.Read(bytes, 0, bytes.Length); //接收数据库
string str = Encoding.BigEndianUnicode.GetString(bytes, 0, bytesRead); Console.WriteLine(Encoding.BigEndianUnicode.GetString(bytes, 0, bytesRead));
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
try
{
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();
client.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
listener.Stop();
OleDbCommand cmd = new OleDbCommand("select * from images", sysConn.conn);
OleDbDataReader dr = cmd.ExecuteReader();
string[] str = new string[7];
string strSender;
TcpClient client = new TcpClient("192.168.1.168", 8181);
if (dr.HasRows)
{
while (dr.Read())
{
NetworkStream ns = client.GetStream();
//在这里发送或接收
str[0] = dr[0].ToString();
str[1] = dr[1].ToString();
str[2] = dr[2].ToString();
str[3] = dr[3].ToString();
str[4] = dr[4].ToString();
str[5] = dr[5].ToString();
str[6] = dr[6].ToString();
strSender = String.Join(",", str);
byte[] bStr = System.Text.Encoding.BigEndianUnicode.GetBytes(strSender);
}
}
假如有三条记录.我想一条一条的发往服务器.可以现在服务器端接收的时候是把三条记录一下全部接收了.怎么回事!服务器代码: int porNum = 8181;
bool done = false;
IPAddress ip = Dns.GetHostAddresses(Dns.GetHostName())[0];
TcpListener listener = new TcpListener(ip, porNum);
listener.Start();
while (!done)
{
Console.Write("正在侦听81端口...");
TcpClient client = listener.AcceptTcpClient(); Console.WriteLine(" 处理连接请求...");
NetworkStream ns = client.GetStream();
//ns.Read(,0,);
byte[] bytes = new byte[1024];
int bytesRead = ns.Read(bytes, 0, bytes.Length); //接收数据库
string str = Encoding.BigEndianUnicode.GetString(bytes, 0, bytesRead); Console.WriteLine(Encoding.BigEndianUnicode.GetString(bytes, 0, bytesRead));
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
try
{
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();
client.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
listener.Stop();
解决方案 »
- 文本框输入Ip满三位时怎样让光标自动换行(C# winforms)
- 使用MailMessage和SmtpClient发送邮件失败,错误信息:"邮箱不可用。 服务器响应为: Óû§±»Ëø&
- C#读取excel多个sheet中的变量进行求和,如何做比较简单?
- 服务器网络问题
- 如果解除程序只运行一次
- 在客户端用Excel宏调用SQL Server存储过程的问题?
- C#控制台程序中,实现定时执行一段代码,在线等
- 如何得到数据库表结构???
- 小声问一下,在线等
- 求资源
- c# 读取ini 文件得不到里面的值怎么回事???
- 求解,在试连接数据库例子时老出错,我是新手,求高手帮下
或者客户端在发完一条信息后,等服务器收到信息后,让服务器给客户端发一条信息,表示已正确接收到一条信息,客户端检测到该信息之后再发下一条信息
既然你用了while,结束标志为读不到数据,那么就不应该设置那么大的缓存,你的byte[] b应该给小点,一般设置为1024字节:byte[] b = new byte[1024]
无论发送方还是接收放,一次性发送或者接收数据都不能过大,因为一个TCP包最大大小也只有1500字节,如果你过大了,也会自动分包发送的,不分包就会直接被丢弃,导致数据包无法发送成功。
这里有我上传的VS2008上执行的例子,即使不是VS2008,也就一个匿名委托部分需要自己实现,接收发送部分都可以参考:实现简单的Socket文件传输示例
我下载不了呀.发我邮箱里可以吗?
654290679@qq.com
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace MyCSDN
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
} private void button1_Click(object sender, EventArgs e)
{
string[] ready_send_file=all_files.Split('^'); //我用^来标示文件
for(i=0;i<ready_send_file.Length;i++)
{
SendFile(ready_send_file[i]); //将文件名作为参数
}
} private void SendFile(string path)
{
TcpClient client = new TcpClient("192.168.1.254",9999);
NetworkStream nk =client.GetStream();
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read); //注意与receive的filestream的区别
BinaryReader binaryreader = new BinaryReader(file);
byte[] b = new byte[4098];
int data = 0; ;
//Console.WriteLine("正在发送文件");
int bodylenght = (int)file.Length; //初始化进度条
int uoi = 0; //初始化进度条
this.progressBar1.Maximum = bodylenght; //初始化进度条
while ((data = binaryreader.Read(b, 0,4098)) != 0) //这个注意是将文件写成流的形式
{
uoi = uoi + 4098;
client.Client.Send(b, data, SocketFlags.None); //发送文件流到目标机器
if (uoi >= bodylenght)
this.progressBar1.Value = bodylenght;
else
this.progressBar1.Value = uoi;
}
this.label1.Text = uoi.ToString();
client.Client.Shutdown(SocketShutdown.Both);
client.Close();
binaryreader.Close();
file.Close();
}
}
}