C# 在WinForms中创建用于聊天的客户端应用程序
我正在尝试用C#,WinForms创建简单的聊天C# 在WinForms中创建用于聊天的客户端应用程序,c#,winforms,client,client-server,C#,Winforms,Client,Client Server,我正在尝试用C#,WinForms创建简单的聊天 TcpClient client; public MainWindow() { InitializeComponent(); client = new TcpClient("192.168.0.100", 1234); AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnPro
TcpClient client;
public MainWindow()
{
InitializeComponent();
client = new TcpClient("192.168.0.100", 1234);
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
ReadAsync(client,logbox);
}
private void sendButton_Click(object sender, EventArgs e)
{
string text = textBox.Text;
byte[] data = Encoding.ASCII.GetBytes(text);
NetworkStream stream = client.GetStream();
stream.Write(data,0,text.Length);
}
static async void ReadAsync(TcpClient client, RichTextBox box)
{
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
while (true)
{
await stream.ReadAsync(buffer, 0, 1024);
box.AppendText(Encoding.ASCII.GetString(buffer));
}
}
private void MainWindow_Load(object sender, EventArgs e)
{
}
void OnProcessExit(object sender, EventArgs e)
{
client.Close();
}
我有问题,发送按钮点击,发送功能不工作。
我想,它在等着小溪。关闭();发送数据,但我需要此流来接收数据。您应该使用套接字,这是一个简单的聊天winforms示例: 服务器:
using System;
using System.Threading;
using System.Net.Sockets;
using System.Text;
using System.Collections;
namespace ChatServer
{
class Program
{
public static Hashtable clientsList = new Hashtable();
static void Main(string[] args)
{
TcpListener serverSocket = new TcpListener(8888);
TcpClient clientSocket = default(TcpClient);
int counter = 0;
serverSocket.Start();
Console.WriteLine("Chat Server Started ....");
counter = 0;
while ((true))
{
counter += 1;
clientSocket = serverSocket.AcceptTcpClient();
byte[] bytesFrom = new byte[1000025];
string dataFromClient = null;
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
clientsList.Add(dataFromClient, clientSocket);
broadcast(dataFromClient + " Joined ", dataFromClient, false);
Console.WriteLine(dataFromClient + " Joined chat room ");
handleClinet client = new handleClinet();
client.startClient(clientSocket, dataFromClient, clientsList);
}
clientSocket.Close();
serverSocket.Stop();
Console.WriteLine("exit");
Console.ReadLine();
}
public static void broadcast(string msg, string uName, bool flag)
{
foreach (DictionaryEntry Item in clientsList)
{
TcpClient broadcastSocket;
broadcastSocket = (TcpClient)Item.Value;
NetworkStream broadcastStream = broadcastSocket.GetStream();
Byte[] broadcastBytes = null;
if (flag == true)
{
broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg);
}
else
{
broadcastBytes = Encoding.ASCII.GetBytes(msg);
}
broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length);
broadcastStream.Flush();
}
}
}
public class handleClinet
{
TcpClient clientSocket;
string clNo;
Hashtable clientsList;
public void startClient(TcpClient inClientSocket, string clineNo, Hashtable cList)
{
this.clientSocket = inClientSocket;
this.clNo = clineNo;
this.clientsList = cList;
Thread ctThread = new Thread(doChat);
ctThread.Start();
}
private void doChat()
{
int requestCount = 0;
byte[] bytesFrom = new byte[100025];
string dataFromClient = null;
Byte[] sendBytes = null;
string serverResponse = null;
string rCount = null;
requestCount = 0;
while ((true))
{
try
{
requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
Console.WriteLine("From client - " + clNo + " : " + dataFromClient);
rCount = Convert.ToString(requestCount);
Program.broadcast(dataFromClient, clNo, true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}//end while
}//end doChat
} //end class handleClinet
}
客户:
using System;
using System.Windows.Forms;
using System.Text;
using System.Net.Sockets;
using System.Threading;
namespace ChatClientForms
{
public partial class Form1 : Form
{
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
NetworkStream serverStream = default(NetworkStream);
string readData = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox3.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
}
private void button2_Click(object sender, EventArgs e)
{
readData = "Conected to Chat Server ...";
msg();
clientSocket.Connect("127.0.0.1", 8888);
serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox1.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
Thread ctThread = new Thread(getMessage);
ctThread.Start();
}
private void getMessage()
{
while (true)
{
serverStream = clientSocket.GetStream();
int buffSize = 0;
byte[] inStream = new byte[100025];
buffSize = clientSocket.ReceiveBufferSize;
serverStream.Read(inStream, 0, buffSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
readData = "" + returndata;
msg();
}
}
private void msg()
{
if (this.InvokeRequired)
this.Invoke(new MethodInvoker(msg));
else
textBox2.Text = textBox2.Text + Environment.NewLine + " >> " + readData;
}
}
}
这会引发异常吗?上面的代码没有明显的错误。所以不管你有什么问题,都是你没有分享的代码。你的问题需要包括一个可靠地再现问题的好例子。对于网络代码,这意味着您需要同时包括客户端和服务器。此外,您需要提供比“不工作”更具体的问题陈述。调试程序什么也不显示。我的服务器端:这不是问题的答案。无论如何,它都无法解释OP的代码为什么不起作用。还要注意,您声称OP应该使用套接字是愚蠢的。他们正在使用
TcpClient
,它只是套接字的包装器,是执行网络操作的完美方式。最后,仅仅是代码转储的帖子,没有任何有用的解释,是没有用的。