1、由于计算机积极拒绝。。无法连接。
2、引发类型system.outofmemoryExeption异常。
3、无法将数据写入传输连接:远程主机强迫关闭了一个现有连接。
4、通常每个套接字()只允许使用1次。
5、您的主机软件中止了一个已建立的连接。
客户端,循环发送从内存读取的数据,代码如下:
1 public MainWindow() 2 { 3 InitializeComponent(); 4 System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); 5 timer.Tick += new EventHandler(timer_Tick); 6 timer.Interval = 100; 7 timer.Start(); 8 } 9 10 void timer_Tick(object sender, EventArgs e) 11 { 12 StartSendVideo(); 13 } 14 15 public void StartSendVideo() 16 { 17 try 18 { 19 myClient = new TcpClient(); 20 IPAddress address = IPAddress.Parse("192.168.13.166"); 21 myClient.Connect(address, 5000); 22 ms = new MemoryStream(); 23 24 System.Drawing.Image btmp; 25 btmp = vw.GetImage(); 26 btmp.Save(ms, ImageFormat.Bmp); 27 byte[] arrImage = ms.GetBuffer(); 28 myns = myClient.GetStream(); 29 mysw = new BinaryWriter(myns); 30 mysw.Write(arrImage); 31 ms.Flush(); 32 mysw.Flush(); 33 myns.Flush(); 34 ms.Close(); 35 mysw.Close(); 36 myns.Close(); 37 myClient.Close(); 38 } 39 catch (Exception ex) 40 { 41 System.Windows.Forms.MessageBox.Show(ex.Message, "Video Conference Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 42 } 43 }
服务器端代码如下循环接收,代码如下:
1 private void button1_Click(object sender, RoutedEventArgs e) 2 { 3 Thread recThread; 4 recThread = new Thread(new ThreadStart(StartReceiveVideo)); 5 recThread.IsBackground = true; 6 recThread.Start(); 7 this.button1.IsEnabled = false; 8 } 9 10 private void StartReceiveVideo() 11 { 12 try 13 { 14 IPAddress address = IPAddress.Parse("192.168.13.166"); 15 TcpListener myTcpL = new TcpListener(address, 5000); 16 myTcpL.Start(); 17 //Socket mySocket = myTcpL.AcceptSocket(); 18 tcpClient = myTcpL.AcceptTcpClient(); 19 ns = tcpClient.GetStream(); 20 //ns = new NetworkStream(mySocket); 21 pictureBox1.Image = System.Drawing.Image.FromStream(ns); 22 23 lock (tcpClient) 24 { 25 if (tcpClient.Connected == true) 26 { 27 myTcpL.Stop(); 28 while (true) 29 { 30 StartReceiveVideo(); 31 } 32 } 33 } 34 ns.Flush(); 35 } 36 catch (Exception ex) 37 { 38 System.Windows.Forms.MessageBox.Show(ex.Message); 39 } 40 }
希望各位大能给予详细的解答,比如代码哪儿需要如何改,初次接触socket编程,不鸟解。
1.多半是防火墙
2. pictureBox1.Image = System.Drawing.Image.FromStream(ns); 赋值前如果非空先pictureBox1.Image.Dispose();
StartReceiveVideo() 这个在无限循环 while(true){ while(true).......}
3.之后的问题,建议楼主还是多看些例子,多理解一下。
循环在哪????
你得加个while(true)死循环!
加了啊上面服务器:
lock (tcpClient) 24 { 25 if (tcpClient.Connected == true) 26 { 27 myTcpL.Stop(); 28 while (true) 29 { 30 StartReceiveVideo(); 31 } 32 } 33 }
客户端和服务端都要加while(true)死循环,一直等待接受消息,然后处理,返回消息。
只做了服务端接收,这都没搞通,还没设计到双工。
1.服务代码多次打开端口坚挺,所以会导致客户断出由于计算机积极拒绝。。无法连接。
2.内存耗尽,出错.,
3.代码有严重的逻辑问题,建议找点代码修改。
我觉得也是,但是弄了好几天没弄成啊,大量的tcp连接处于wait和fin_2状态
@七星端砚: 建议放弃你这代码,网上找一段,然后在其基础上写都比这强
1.要访问的端口访问不到。
2.客户端循环太快了吧。你的timer事件。100ms就执行一次。
3.服务器只能排队处理。
服务器排队不怎么会搞,有木有参考的东西。
由于计算机积极拒绝。。无法连接。 大部分是因为服务器没开或 服务器连接数已满
1、多半是服务端已经关了,打一顿就好了;
2、缓冲区木有定义长度
3、多半是服务端已经关了,打一顿就好了;
4、进程里面杀掉所有实例,重新启动。目测这是端口被占了。
5、和4一样的问题,如果解决不了,请砸电脑。
我真的很用心的在回答问题。
略吊