C#中TCP/IP数据传送问题

Breezexiang 2007-11-16 02:02:23
我想做个象VNC那种远程软件
我现在能让CLIENT端截当前桌面的图,但是发送不到服务端,我对于TCP/IP这块编程不是很懂,请问该怎么做啊

CLIENT:
private void button2_Click(object sender, EventArgs e)
{
Image MyImg = GetDesktopImage();
MemoryStream ms = new MemoryStream();
MyImg.Save(ms, ImageFormat.Jpeg);

byte[] send = ms.GetBuffer();
try
{
TcpClient m_client = new TcpClient("127.0.0.1", 12345);
NetworkStream stream = m_client.GetStream();
stream.Write(send, 0, send.Length);
stream.Close();
m_client.Close();
}
catch (SocketException aa)
{
MessageBox.Show(aa.Message);
}
}
--------------------------------------------------------------------------
SEVER:
TcpListener m_server;
TcpClient m_client;

private void Form1_Load(object sender, EventArgs e)
{
m_server = new TcpListener(12345);
try
{
//m_server=server;
textBox1.Text = "已经开始了";
m_server.Start();

Thread m_thread = new Thread(new ThreadStart(GetConn));//开启线成
m_thread.Start();//运行
}
catch (SocketException ae)
{
MessageBox.Show("错误源" + ae.Source + "表示" + ae.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

private void GetConn()//线成函数
{
m_client = m_server.AcceptTcpClient();
TcpClient c = this.m_client;
Thread m_thread = new Thread(new ThreadStart(GetConn));
m_thread.Start();
NetworkStream stream = c.GetStream();
byte[] recv = new byte[999999];
string msg = "";
string temp;
try
{
int a = 0;
a = stream.Read(recv, 0, 999999);
if (a > 0)
{
MemoryStream ms = new MemoryStream(recv);
Image image = Image.FromStream(ms, true);

pictureBox1.Image = image;
}
stream.Close();
c.Close();
}
catch (SocketException es)
{
MessageBox.Show("错误源" + es.Source + "表示" + es.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
...全文
274 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtk13 2008-04-06
  • 打赏
  • 举报
回复
我也想过VNC的问题,
VNC问题是建立在TCP/IP协议基础上的,
所以应该是客户端发起指令,服务器端返回图象,
第一,主要是一个图象差的算法,VNC并不是把服务器端所有的图象传过来,那样太慢了,
传过来的是一个图象差值,传到客户端后再根据图象差值来显示在客户端,
这个算法是相当了不起的,我找了很多资料都没有关于.NET算图象差值的.
第二,是关键在于传输的速度,需要用到压缩技术,把差值来压缩传输,这个算法在互联网有很多.
第三,是模拟鼠标的点击.要按简化到指命传输,

总之感觉很难,如果楼主写出来了,请一定要跟大家讲讲你的算法.
minioreo 2008-04-06
  • 打赏
  • 举报
回复
关注ing 帮顶
wuxiao_v 2008-04-06
  • 打赏
  • 举报
回复
楼主很聪明啊,居然想到用递归监听客户端,我都是用while(boo)的

如果说你的程序卡我估计是大量的资源都用在io上了,每一张图都开一个关一个straem会用很多资源的

如果我是你就在两边都建里一个缓冲池攒够数量了在发一次.

如果不建缓冲池,建立用异步的straem读/存,反正象你这么做太费资源了

你是不是想再客户端用一个 Timer自动发
smallfz 2008-04-06
  • 打赏
  • 举报
回复
强烈要求版主处理楼上那个人,烦的很,完全是广告,一点实质东西都没有

-----------

一张一张传估计数据太大,如果非要这样,可以找个Zip库把流数据压缩了再传输,BMP图片的经过压缩后可以很有效,
另外的办法就是把位图序列制作成MPG视频流,这个估计比较复杂,我也不太懂


wolf8029 2008-04-06
  • 打赏
  • 举报
回复
你这种 得到 有时候 会黑屏吧,我之前 也研究过此类问题
zhnzzy 2007-12-04
  • 打赏
  • 举报
回复
up
wumingbing_8027 2007-12-04
  • 打赏
  • 举报
回复
不会,帮你顶
Breezexiang 2007-12-04
  • 打赏
  • 举报
回复
111111111111111111111
Breezexiang 2007-11-24
  • 打赏
  • 举报
回复
qiujiu !!!!!!!!!!!!
Breezexiang 2007-11-16
  • 打赏
  • 举报
回复
求救啊求救啊!!!
Breezexiang 2007-11-16
  • 打赏
  • 举报
回复
有人吗?
Breezexiang 2007-11-16
  • 打赏
  • 举报
回复
我错了,现在图是能发过来,但是我想做成象VNC那种很流畅的远程监视,但是我如果在客户端加个定时器不停的发图的话,会很卡……而且极不流畅

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧