你好,我是一名学生,我还不习惯c#。我正在用服务器和客户机编写程序,它们通过套接字连接。我正在尝试使用while循环实现一种在数据可用时从流中读取的方法。如果在读取/写入流之前使用MessageBox.Show()显示消息,则可以避免崩溃。我不知道为什么没有显示消息的程序无法正常工作...
public partial class Form1 : Form
{
const int port = 22222;
const string ip = "127.0.0.1";
IPAddress ipServer = IPAddress.Parse(ip);
TcpListener server = null;
TcpClient client = null;
Thread thServer = null;
Thread thClient = null;
NetworkStream dataStream = null;
const int a = 11;
const int n = 251;
string receivedMessage = "";
bool? izbira = null;
public Form1()
{
InitializeComponent();
thServer = new Thread(new ThreadStart(startServer));
thServer.IsBackground = true;
thServer.Start();
}
void startServer() {
server = new TcpListener(ipServer,port);
server.Start();
textBox4.Invoke(new action(() => textBox4.AppendText("Strežnik: zagnan na: IP: " + ip + ",port:" + port)));
client = new TcpClient();
client = server.acceptTcpClient();
NetworkStream dataStream = client.GetStream();
textBox4.Invoke(new action(() => textBox4.AppendText(Environment.NewLine + "Strežnik: Sprejet nov uporabnik")));
if (izbira == true)
{
byte[] message = new byte[1024];
if(dataStream.DataAvailable)
dataStream.Read(message,message.Length);
receivedMessage = Encoding.UTF8.GetString(message);
textBox4.Invoke(new action(() => textBox4.AppendText(Environment.NewLine + "Strežnik: Dobil sem sporočilo: " + receivedMessage)));
message = new byte[1024];
message = Encoding.UTF8.GetBytes("drugo sporocilo!");
dataStream.Write(message,message.Length);
}
else {
byte[] message = new byte[1024];
message = Encoding.UTF8.GetBytes("serbus");
dataStream.Write(message,message.Length);
}
}
void button1_Click(object sender,EventArgs e) {
if (izbira == null) {
textBox4.Invoke(new action(() => textBox4.AppendText(Environment.NewLine + "Izbrati morate ali boste datoteko prenesli ali poslali!")));
return;
}
this.button1.Enabled = false;
client = new TcpClient();
IPAddress insertedIp = IPAddress.Parse(textBox1.Text);
client.Connect(insertedIp,Convert.ToInt32(textBox3.Text));
dataStream = client.GetStream();
if (izbira == true)
{
byte[] message = new byte[1024];
message = Encoding.UTF8.GetBytes("hejj");
dataStream.Write(message,message.Length);
message = new byte[1024];
MessageBox.Show("");
while (true)
{
if (dataStream.DataAvailable)
{
dataStream.Read(message,message.Length);
break;
}
}
receivedMessage = Encoding.UTF8.GetString(message);
textBox4.Invoke(new action(() => textBox4.AppendText(Environment.NewLine + "Strežnik: Dobil sem sporočilo: " + receivedMessage)));
}
else {
byte[] message = new byte[1024];
MessageBox.Show("Serbus");
while (true)
{
if (dataStream.DataAvailable)
{
dataStream.Read(message,message.Length);
break;
}
}
receivedMessage = Encoding.UTF8.GetString(message);
textBox4.Invoke(new action(() => textBox4.AppendText(Environment.NewLine + "Strežnik: Dobil sem sporočilo: " + receivedMessage)));
}
}
void buttonUpload_Click(object sender,EventArgs e) {
izbira = true;
this.buttonDownload.Enabled = false;
}
void buttonDownload_Click(object sender,EventArgs e) {
izbira = false;
this.buttonUpload.Enabled = false;
this.button2.Text = "Prenesi";
}