我想做个象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);
}
}
我现在能让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);
}
}
解决方案 »
- asp.net开发中什么时候用到out或者ref 看到有些项目中别人会用到这些 但是我不明白为什么要用
- vs2010连接sqlserver2008?
- C#.net中怎么读写图片到数据库中 求代码
- 怎样在一个类里声名一个自己?
- 两个项目中的类的类型转换
- 一个用C#读取dll的问题
- 事件就是一种代理?
- 怎样在一个Form里对另一个Form里的控件进行操作??
- C#关于打印datagridview——单元格内容换行打印问题
- 帮我解决一下内存中高位和低位的问题~
- 散分了,在vs.net2003 MSDN安装过程中提示没有setup.hlp文件,后搜索东西总是提示"windows正在配置vs.net2003-chs,请稍侯"
- 倾家荡产了,在问个ComboBox问题?
另外的办法就是把位图序列制作成MPG视频流,这个估计比较复杂,我也不太懂
VNC问题是建立在TCP/IP协议基础上的,
所以应该是客户端发起指令,服务器端返回图象,
第一,主要是一个图象差的算法,VNC并不是把服务器端所有的图象传过来,那样太慢了,
传过来的是一个图象差值,传到客户端后再根据图象差值来显示在客户端,
这个算法是相当了不起的,我找了很多资料都没有关于.NET算图象差值的.
第二,是关键在于传输的速度,需要用到压缩技术,把差值来压缩传输,这个算法在互联网有很多.
第三,是模拟鼠标的点击.要按简化到指命传输,总之感觉很难,如果楼主写出来了,请一定要跟大家讲讲你的算法.