窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | server | 网络服务器 | | client | 客户 | | 客户Duan句柄 | 整数型 | | 接收数据 | 文本型 | | 发送数据 | 文本型 | |
如果 (server. 启动 (到数值 (端口号编辑框.内容 )) = 真) 接收消息编辑框. 加入文本 (“服务器启动成功,端口号:” + 端口号编辑框.内容 + #换行符 ) 客户Duan句柄 = server. 监听 (5000 ) 如果 (客户Duan句柄 ≠ -1 )  接收消息编辑框. 加入文本 (“客户进入,客户句柄:” + 到文本 (客户Duan句柄 ) + #换行符 )  时钟1.时钟周期 = 1000   接收消息编辑框. 加入文本 (“客户连接超时,服务器已关闭” + #换行符 )  server. 停止 ()   接收消息编辑框. 加入文本 (“服务器启动失败” + #换行符 ) 如果 (server. 发送 (客户Duan句柄, 发送内容编辑框.内容, 500 ) = 真) 接收消息编辑框. 加入文本 (“服务器发送:” + 发送内容编辑框.内容 + #换行符 ) 接收消息编辑框. 加入文本 (“服务器发送消息失败” + #换行符 ) 消息数据 = 到文本 (server. 接收 (客户Duan句柄, 500, )) 如果真 (消息数据 ≠ “”) 接收消息编辑框. 加入文本 (到文本 (取现行时间 ()) + “收到客户Duan消息” + 消息数据 + #换行符 ) 如果 (server. 停止 () = 真) 时钟1.时钟周期 = 0  接收消息编辑框. 加入文本 (“服务器已关闭” + #换行符 ) 接收消息编辑框. 加入文本 (“服务器关闭失败” + #换行符 ) [C#] 纯文本查看 复制代码 using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main()
{
// 定义服务器的 IP 地址,这里使用本地回环地址,通常用于在同一台机器上进行测试
string serverIP = "127.0.0.1";
// 定义服务器监听的端口号
int serverPort = 8888;
// 使用 using 语句确保在代码执行完毕后正确释放 TcpClient 资源
using (TcpClient client = new TcpClient())
{
// 尝试与指定的服务器 IP 地址和端口建立连接
client.Connect(serverIP, serverPort);
// 获取与服务器连接的网络流,通过这个流可以进行数据的发送和接收
NetworkStream stream = client.GetStream();
// 创建一个大小为 1024 的字节数组,用于接收服务器返回的数据
byte[] buffer = new byte[1024];
// 进入无限循环,持续接收服务器消息
while (true)
{
// 从网络流中读取数据到缓冲区,并获取实际读取到的字节数量
int bytesRead = stream.Read(buffer, 0, buffer.Length);
// 将接收到的字节数组转换为字符串,同样使用 ASCII 编码方式,然后输出接收到的服务器响应内容
string receivedData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("接收到服务端响应:" + receivedData);
// 如果接收到的内容是 "exit",则退出循环
if (receivedData == "exit")
break;
// 定义要发送给服务器的消息文本内容
string messageToSend = "C#客户Duan发送的数据";
// 将消息文本转换为字节数组,这里使用 ASCII 编码方式进行转换
byte[] dataToSend = Encoding.ASCII.GetBytes(messageToSend);
// 将字节数组写入网络流,从而将数据发送给服务器
stream.Write(dataToSend, 0, dataToSend.Length);
}
// 关闭客户Duan连接,释放相关资源
client.Close();
}
}
}
|