所以我有一个Visual Studio C #WindowsForms程序。它能够在后台打开一个套接字让tcp客户端加入。然后他们可以交换数据。 问题是将数据写入该tcp套接字对我来说是个问题。读数据是成功的。
所以我的form1:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private TcpListener listener;
private Socket socket;
...
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = 0;
webBrowser1.GoHome();
const int LIMIT = 1; //5 concurrent clients
listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
for (int i = 0; i < LIMIT; i++)
{
Thread t = new Thread(() => {
socket = EmployeeTCPServer.accepting(listener, this);
});
t.Start();
}
toolStripStatusLabel1.Text = "Waiting for Connection";
listBox1.Items.Add("Waiting");
}
...
private void button3_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(new NetworkStream(socket));
sw.WriteLine("-> Stuff");
}
接受客户端必须有线程,以防表单继续工作,这应该是所有邪恶的来源。我的TCP服务器类:
class EmployeeTCPServer
{
public static Socket accepting(TcpListener plistener, Form1 parent)
{
Socket soc = plistener.AcceptSocket();
parent.SetText("Connection accepted");
Stream s = new NetworkStream(soc);
StreamReader sr = new StreamReader(s);
StreamWriter swa = new StreamWriter(s);
swa.AutoFlush = true; // enable automatic flushing
swa.WriteLine("-> Connected to Iface");
Service(plistener, parent, soc);
return soc;
}
public static void Service(TcpListener plistener, Form1 parent, Socket psoc)
{
bool EMPFANG = true;
Stream s = new NetworkStream(psoc);
StreamReader sr = new StreamReader(s);
StreamWriter swa = new StreamWriter(s);
swa.AutoFlush = true;
while (EMPFANG)
{
string name = sr.ReadLine();
parent.LBSetText(name);
if(name=="exit")
{
swa.WriteLine("-> Exit OK");
EMPFANG = false;
}
}
psoc.Close();
}
}
当我点击“Antworten”(Button3)时问题崩溃了。它说sw是NULL,对我来说这意味着套接字描述符的返回不起作用。 我也尝试在tcp服务器类中创建一个新方法(类似“send_msg_to_client(string pmessage)”),但后来我不知道如何调用该方法。 那么哪种方法是正确的,如何在点击按钮时发送数据?
提前感谢您的帮助!
答案 0 :(得分:0)
听起来你想要一个简单的聊天&#34;系统在客户端和主机之间发送特定消息。
试着看看这个项目: http://www.eng.northampton.ac.uk/~espen/CSY2026/CSY2026CSharp5.htm
也许这可能是一些灵感。
让我知道它是否有帮助!