尝试在 Visual Studio 2010 中创建聊天应用程序
本文关键字:创建 聊天 应用程序 2010 Studio Visual | 更新日期: 2023-09-27 18:34:12
我是网络初学者,但我必须从一些东西开始,所以我决定使用 C# 语言 (winforms( 在 Visual Studio 2010 中创建一个聊天应用程序。
我用谷歌搜索了很多关于这个的信息,我几乎找到了我需要的东西。我找到了以下代码示例(在 C# - 控制台中(:
http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx
http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener(v=VS.71(.aspx
我想使用 TCP 协议创建该应用程序(我不知道是否有更简单的方法可以做到这一点,但是当我尝试用 C# 创建聊天时,我了解了 TCP 的基础知识。
当我执行上面链接中的代码示例时,它们起作用了!所以我试图在我的聊天应用程序中调整这些示例。
我的聊天应用程序实际上由两个应用程序组成:服务器和客户端。它们都具有相同的GUI(两个文本框,一个按钮和两个标签,用于显示客户端是否已连接到服务器(。
服务器/客户端应用上的 textBox1 是显示客户端/服务器应用发送的消息的那个。在服务器/客户端应用的 textBox2 中,用户键入一条消息,然后按该按钮将消息发送到客户端/服务器应用。
让我向您展示我到目前为止尝试过的内容:这是服务器应用程序代码。
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;
namespace Server_TCP_WINFORMS
{
public partial class Form1 : Form
{
//Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);
public Form1()
{
InitializeComponent();
server.Start();
}
byte[] bytes = new byte[256];
String data = null;
TcpClient client = new TcpClient();
bool sw = true;
int data_at_byte_level = 0;
private void Form1_Load(object sender, EventArgs e)
{
try
{
label2.Text = "Waiting for an incoming connection...";
if (!server.Pending())
{
label2.Text = "For moment, there are no connections requests!";
}
else
{
client = server.AcceptTcpClient();
label2.Text = "Connected!";
sw = false;
}
}
catch (SocketException xyz)
{
MessageBox.Show("Exception occured!");
}
if (sw == false)
{
NetworkStream stream = client.GetStream();
while ((data_at_byte_level = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes);
textBox1.Text += data;
data = null;
bytes = null;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
String dataT;
if (textBox2.Text!=null && sw == false)
{
NetworkStream stream = client.GetStream();
dataT = textBox2.Text;
byte[] msg = System.Text.Encoding.ASCII.GetBytes(dataT);
stream.Write(msg, 0, msg.Length);
}
}
}
}
这是客户端应用程序代码:
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.Sockets;
using System.Net;
namespace Client_TCP_WINFORMS
{
public partial class Form1 : Form
{
TcpClient client = new TcpClient("127.0.0.1", 13000);
public Form1()
{
InitializeComponent();
label2.Text = "Conected to the server!";
}
private void button1_Click(object sender, EventArgs e)
{
NetworkStream stream = client.GetStream();
if (textBox2.Text != null)
{
String data_str = textBox2.Text;
Byte[] data_byte = System.Text.Encoding.ASCII.GetBytes(data_str);
stream.Write(data_byte, 0, data_byte.Length);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Byte[] data_byte = new Byte[290];
int bytes;
string Data;
NetworkStream stream = client.GetStream();
bytes = stream.Read(data_byte, 0, data_byte.Length);
Data = System.Text.Encoding.ASCII.GetString(data_byte, 0, bytes);
textBox1.Text += Data;
}
}
}
我希望这两个应用程序的行为方式如下:我启动服务器应用程序,然后启动客户端应用程序。当它们都打开时,我希望它们已经连接(因为我认为这样更简单(。
然后,我希望它们都是接受的,这意味着当服务器(例如(向客户端发送消息时,后者应该接收消息并显示它。如果服务器发送另一条消息,客户端也应接收并显示它。如果用户(客户端或服务器的用户(按下发送按钮,则应用程序应将消息从 textBox2 发送到其他应用程序。如何在窗口窗体中执行这些操作?
我在控制台的代码示例中看到有一个主循环,服务器在其中从客户端读取消息。但是,如果服务器也想发送消息怎么办?如果按下发送按钮,则button_pressed的事件会发生,然后发送消息,但是当它完成发送消息时,它会返回到主循环?
请原谅我的英语。我不是母语人士。
恭敬地谢谢你。
"当它们都打开时,我希望它们已经连接起来(因为我认为这样更简单(。
为此,您需要使用UDP(用户数据报协议(而不是TCP