在C#soket编程中遇到问题 [英] having problem in C# soket programming
本文介绍了在C#soket编程中遇到问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace sokect_ex_client
{
public partial class Client : Form
{
UdpClient client;
IPEndPoint portnum;
public Client()
{
InitializeComponent();
portnum = new IPEndPoint(new IPAddress(0), 0);
client = new UdpClient(9000);
Thread thread = new Thread(new ThreadStart(sendquestion));
thread.Start();
}
public void sendquestion()
{
while (true)
{
string pak;
byte[] data;
data = client.Receive(ref portnum);
listBox1.Items.Add(System.Text.Encoding.ASCII.GetString(data) + "recived ack send ");
//IPEndPoint ip_end = new IPEndPoint(, 80);
pak = question_add.Text;
data = System.Text.Encoding.ASCII.GetBytes(pak);
client.Send(data, data.Length, portnum);
listBox1.Items.Add(System.Text.Encoding.ASCII.GetString(data) + "sended");
data = client.Receive(ref portnum);
listBox1.Items.Add(System.Text.Encoding.ASCII.GetString(data) + "recived");
//http get :
}
}
private void button1_Click(object sender, EventArgs e)
{
string pak = "connect";
byte[] data = System.Text.Encoding.ASCII.GetBytes(pak);
client.Connect("localhost", 8000);
client.Send(data, data.Length, portnum);
}
}
}
----------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace soket_example
{
public partial class Server : Form
{
UdpClient client;
IPEndPoint portnum;
public Server()
{
InitializeComponent();
client = new UdpClient(8000);
portnum = new IPEndPoint(new IPAddress(0),0);
Thread readt = new Thread(new ThreadStart(wait));
readt.Start();
}
public void wait()
{
while (true)
{
byte[] data = client.Receive(ref portnum);
client_txt.Items.Add(System.Text.Encoding.ASCII.GetString(data));
string send_ok = "ok";
data = System.Text.Encoding.ASCII.GetBytes(send_ok);
client.Send(data, data.Length , portnum);
client_txt.Items.Add("accepted connect ");
data = client.Receive(ref portnum);
client_txt.Items.Add(System.Text.Encoding.ASCII.GetString(data));
StreamReader readf = new StreamReader("F:\address.txt");
string info;
info = readf.ReadLine();
string[] info1 = new string[4];
//for (int i = 0; i < 4; i++)
info1 = info.Split(',');
if (info1[0] == client_txt.Text )
{
data = System.Text.Encoding.ASCII.GetBytes(info1[1] + "," + info1[2]);
client.Send(data, data.Length, portnum);
client_txt.Items.Add("sending File address ....");
}
else
{
int[] inf = new int[6];
for (int i = 0; i < 6; i++)
{
inf[i] = 0;
}
data = System.Text.Encoding.ASCII.GetBytes(inf.ToString());
client.Send(data, data.Length, portnum);
client_txt.Items.Add("sending File address .... : file address not found !!! ");
}
// break;
}
// client.Close();
}
private void Server_Load(object sender, EventArgs e)
{
}
}
}
客户端中的问题:button1_单击
client.Send(data,data.Length,portnum); :::连接后无法将数据包发送到任意主机.无效的操作异常
[edit]已添加代码块,将我的内容作为纯文本格式..."选项已禁用-OriginalGriff [/edit]
problem in client : button1_ click
client.Send(data, data.Length, portnum); ::: Cannot send packets to an arbitrary host while connected. invalid operation exception
[edit]Code block added, "Treat my content as plain text..." option disabled - OriginalGriff[/edit]
推荐答案
我没有使用过UdpClient但是错误消息似乎很明确:如果您已连接",则不应使用带有端口号的Send版本(必须是UdpClient中的软件层概念).尝试改用client.Send(data,data.Length).
I''ve not used UdpClient but the error message seems clear: you shouldn''t be using the version of Send which takes a port number if you have ''connected'' (must be a software layer concept in the UdpClient). Try using client.Send(data, data.Length) instead.
这篇关于在C#soket编程中遇到问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文