首页 新闻 会员 周边 捐助

C# Socket编程,出现以下几个问题,求教。

0
悬赏园豆:100 [已关闭问题] 关闭于 2014-08-19 09:03

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编程,不鸟解。

受戒人的主页 受戒人 | 初学一级 | 园豆:34
提问于:2014-08-14 15:03
< >
分享
所有回答(7)
0

1.多半是防火墙

2. pictureBox1.Image = System.Drawing.Image.FromStream(ns);  赋值前如果非空先pictureBox1.Image.Dispose();

StartReceiveVideo() 这个在无限循环  while(true){ while(true).......}

3.之后的问题,建议楼主还是多看些例子,多理解一下。

Firen | 园豆:5385 (大侠五级) | 2014-08-14 15:24
0

循环在哪????

你得加个while(true)死循环!

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-08-14 18:00

加了啊上面服务器:

lock (tcpClient) 24 { 25 if (tcpClient.Connected == true) 26 { 27 myTcpL.Stop(); 28 while (true) 29 { 30 StartReceiveVideo(); 31 } 32 } 33 }

支持(0) 反对(0) 受戒人 | 园豆:34 (初学一级) | 2014-08-15 12:59
0

客户端和服务端都要加while(true)死循环,一直等待接受消息,然后处理,返回消息。

Coder²º¹5 | 园豆:15 (初学一级) | 2014-08-14 18:05

只做了服务端接收,这都没搞通,还没设计到双工。

支持(0) 反对(0) 受戒人 | 园豆:34 (初学一级) | 2014-08-15 12:59
0

1.服务代码多次打开端口坚挺,所以会导致客户断出由于计算机积极拒绝。。无法连接。
2.内存耗尽,出错.,

3.代码有严重的逻辑问题,建议找点代码修改。

魏琼东 | 园豆:72 (初学一级) | 2014-08-14 19:15

我觉得也是,但是弄了好几天没弄成啊,大量的tcp连接处于wait和fin_2状态

支持(0) 反对(0) 受戒人 | 园豆:34 (初学一级) | 2014-08-15 13:00

@七星端砚: 建议放弃你这代码,网上找一段,然后在其基础上写都比这强

支持(0) 反对(0) 魏琼东 | 园豆:72 (初学一级) | 2014-08-15 13:23
0

1.要访问的端口访问不到。

2.客户端循环太快了吧。你的timer事件。100ms就执行一次。

3.服务器只能排队处理。

forhells | 园豆:724 (小虾三级) | 2014-08-14 19:53

服务器排队不怎么会搞,有木有参考的东西。

支持(0) 反对(0) 受戒人 | 园豆:34 (初学一级) | 2014-08-15 13:01
0

由于计算机积极拒绝。。无法连接。  大部分是因为服务器没开或 服务器连接数已满

望着天的蜗牛 | 园豆:354 (菜鸟二级) | 2014-08-14 20:44
0

1、多半是服务端已经关了,打一顿就好了;

2、缓冲区木有定义长度

3、多半是服务端已经关了,打一顿就好了;

4、进程里面杀掉所有实例,重新启动。目测这是端口被占了。

5、和4一样的问题,如果解决不了,请砸电脑。

我真的很用心的在回答问题。

Kevin.Choi | 园豆:3 (初学一级) | 2014-08-18 17:30

略吊

支持(0) 反对(0) 受戒人 | 园豆:34 (初学一级) | 2014-08-19 09:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册