socket 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。"

anya 2009-03-23 06:29:55
客户端打开了一个页面,然后一直打开状态,监听并截屏传递给服务器端,

服务器端连接客户端,然后不间断得截屏。

但是现在这种情况我只能截屏一次,再截一次就出现上面的错误提示。

牧野说是要不停的“accept”,可是我找不出问题的所在。下面是代码,谢谢,在线等。

服务器端
#region 发送命令
public void WaitData()
{

try
{
System.Net.Sockets.Socket su = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPEndPoint localEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(StrIp.Replace("'", "''").Trim()), 7878);
su.Blocking = true;
su.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);//设置超时
su.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 3000);
su.Connect(localEndPoint);
su.Send(Encoding.Unicode.GetBytes("1"));


//设置接收数据缓冲区的大小
byte[] b = new byte[1024 * 4];
//如何确定该数组大小
System.IO.MemoryStream fs = new System.IO.MemoryStream();
int got = 0;
int datalength = 0;
while (true)
{

got = su.Receive(b);
fs.Write(b, 0, got);
if (got > 0)
datalength = datalength + got;
else
break;
}
Bitmap Img = new Bitmap(fs);
//保存图片必须用物理路径
string Path3 = Server.MapPath("..\\1.jpg");
Img.Save(Path3, ImageFormat.Jpeg);
//提取服务器端的图片可以用http路径
this.Image1.ImageUrl = Path3;
//关闭写文件流
fs.Close();
//关闭接收数据的Socket
su.Close();
}
catch
{
}
}
#endregion
...全文
3733 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq24447678 2012-10-17
  • 打赏
  • 举报
回复
ping得通吗
LIMINLY520 2012-02-23
  • 打赏
  • 举报
回复
无语的答案
cgp2008 2011-07-04
  • 打赏
  • 举报
回复
看一看 学习一下
fdclewis 2010-08-24
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
fdclewis 2010-08-24
  • 打赏
  • 举报
回复
学习了,看看得分答案~
zhouteng1023 2010-03-17
  • 打赏
  • 举报
回复
11111111111111111
anya 2009-03-23
  • 打赏
  • 举报
回复
请大家帮忙
anya 2009-03-23
  • 打赏
  • 举报
回复
牧野老师说"客户端用多线程"。


怎么用呢

有高手能贴点代码吗
anya 2009-03-23
  • 打赏
  • 举报
回复
谢谢,在线等。有贴代码的吗
gisyellow 2009-03-23
  • 打赏
  • 举报
回复
帮顶了。。
anya 2009-03-23
  • 打赏
  • 举报
回复
客户端
#region 启动程序
Socket s = null;
Thread t;
public void WaitData()
{
s= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 7777); //7575
try
{
s.Bind(localEndPoint);
//绑定到该Socket
s.Listen(100);
//侦听,最多接受100个连接
while (true)
{
byte[] bytes = new byte[1024];
Socket ss = s.Accept();
ss.Receive(bytes);
this.label1.Text = Encoding.Unicode.GetString(bytes).Trim();
if (this.label1.Text == "1")
{

IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
Graphics g1 = Graphics.FromHdc(dc1);
Bitmap MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
IntPtr dc3 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
g1.ReleaseHdc(dc3);
g2.ReleaseHdc(dc2);
MyImage.Save("\\MyJpeg2.jpg", ImageFormat.Jpeg);
ImageThumbnail img = new ImageThumbnail("\\MyJpeg2.jpg");
img.ReducedImage(350, 250, "\\MyJpeg.jpg");

//********************开始使用socket发送文件**************//

//建立终结点
System.IO.FileStream fs = new System.IO.FileStream("C:\\Program Files\\CutSever\\MyJpeg.jpg", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Read);
byte[] fssize = new byte[fs.Length];
System.IO.BinaryReader strread = new System.IO.BinaryReader(fs);
strread.Read(fssize, 0, fssize.Length - 1);
ss.Send(fssize);
fs.Close();
ss.Close();
}

else
{
ss.Send(Encoding.Unicode.GetBytes("请输入正确的指令!"));
ss.Close();
}

}
s.Close();
}
catch
{
}
}

#endregion


#region 初始化
private void Form4_Load(object sender, EventArgs e)
{
t=new Thread(WaitData);
t.Start();
}
#endregion

110,571

社区成员

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

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

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