C# 网络编程之Tcp实现客户端和服务器聊天
最近使用Socket网络套接字编程中,在同步与异步通讯中客户端与服务器总是无法响应,但在学习Tcp协议编程中完成了通讯聊天功能,下面简单讲讲我最近学到的及Tcp聊天的源代码及详细注释。
Tcp协议是一个传输层的协议,在Tcp协议编程中它通常使用的是3个类,其命名空间为System.Net.Sockets:
1.TcpListener:基于TCP协议服务端开发,监听IP地址和端口号是否连接。
该类常用的方法有Start()开始监听、AcceptSocket()返回套接字接受连接请求、AcceptTcpClient()返回客户对象接受连接请求、Stop()停止监听
2.TcpClient:基于TCP协议客户端编程,提供客户端连接,通过网络连接发送接受数据。
该类常用的方法有Connect()与服务器主机连接、GetStream()用来获得答应的数据流、Close()关闭连接
3.NetWorkStream:用于获取和操作网络流,该程序中还是用写入流和读取流对象实现写入和读取数据的操作。
该类常用的方法有Read()从网络流中读取数据、Write()从网络流中写数据。
1.服务端代码(TCPServer)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加新的命名空间
using System.Net;
using System.Net.Sockets;
using System.IO; //流StreamReader
namespace TCPServer
{
class Program
{
static void Main(string[] args)
{
//Parse将字符串转换为IP地址类型
IPAddress myIP = IPAddress.Parse("127.0.0.1");
//构造一个TcpListener(IP地址,端口)对象,TCP服务端
TcpListener myServer = new TcpListener(myIP,6688);
//开始监听
myServer.Start();
Console.WriteLine("等候一个连接...");
//构造TCP客户端:接受连接请求
TcpClient client = myServer.AcceptTcpClient();
Console.WriteLine("客户端已经连接...");
//构造NetworkStream类,该类用于获取和操作网络流
NetworkStream stream = client.GetStream();
//读数据流对象
StreamReader sr = new StreamReader(stream);
//写数据流对象
StreamWriter sw = new StreamWriter(stream);
while (true)
{
Console.WriteLine("客户端:" + sr.ReadLine());
string msg = Console.ReadLine();
sw.WriteLine(msg);
sw.Flush(); //刷新流
}
client.Close(); //关闭客户端
}
}
}
2.客户端代码(TCPClient)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加新的命名空间
using System.Net;
using System.Net.Sockets;
using System.IO; //流StreamReader
namespace TCPClient
{
class Program
{
static void Main(string[] args)
{
//Parse将字符串转换为IP地址类型
IPAddress myIP = IPAddress.Parse("127.0.0.1");
//构造一个TcpClient类对象,TCP客户端
TcpClient client = new TcpClient();
//与TCP服务器连接
client.Connect(myIP, 6688);
Console.WriteLine("服务器已经连接...请输入对话内容...");
//创建网络流,获取数据流
NetworkStream stream = client.GetStream();
//读数据流对象
StreamReader sr = new StreamReader(stream);
//写数据流对象
StreamWriter sw = new StreamWriter(stream);
while (true)
{
string msg = Console.ReadLine();
sw.WriteLine(msg);
sw.Flush(); //刷新流
Console.WriteLine("服务器:" + sr.ReadLine());
}
client.Close();
Console.Read();
}
}
}
先运行服务器(TCPServer)代码,它会显示“等候一个连接…”.再运行客户端(TCPClient)代码,运行后此时服务端显示"客户端已连接…",客户端显示"服务器已连接…请输入对话内容".然后依次在客户端和服务器中个输入聊天内容,在另一方会显示相应传输过来的内容,实现TCP聊天通话。下面是在客户端输入"你好!我是客户端."的反应。
希望可用帮到你,喜欢点个赞呗
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix