连接上服务端和客户端之后,我们就要让他们互动起来了。(到了现在,大家如果对下面代码不懂得地方可以去F12跟踪至源码界面查看,学习就是这样)
先在服务端编写发送函数和接收函数
/// <summary>
/// 发送数据到客户端
/// </summary>
/// <param name="toClientsocket">用以连接客户端的Socket</param>
/// <param name="msg">要传递的数据</param>
static void SendMessagesToClient(Socket toClientsocket,string msg)
{
//只能传递byte数组
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
toClientsocket.Send(data);
}
/// <summary>
/// 接收来自客户端的数据
/// </summary>
/// <param name="toClientsocket">用以连接客户端的Socket</param>
static void ReceiveMessages(Socket toClientsocket)
{
byte[] data = new byte[1024];
int count = toClientsocket.Receive(data);
string msg = Encoding.UTF8.GetString(data, 0, count);
Console.WriteLine("{0} {1}", "收到来自客户端的消息:", msg);
}
然后在客户端编写接收和发送信息的函数
/// <summary>
/// 接收来自服务端的消息
/// </summary>
static void ReceiveMessages()
{
byte[] data = new byte[1024];
int count = clientSocket.Receive(data);
string msg = Encoding.UTF8.GetString(data, 0, count);
Console.WriteLine("{0} {1}", "收到来自服务器的消息:", msg);
}
/// <summary>
/// 发送信息到服务端
/// </summary>
/// <param name="msg">要发送的信息</param>
static void SendMessagetoServer(string msg)
{
//将字符串转为byte数组
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
//发送到服务器
clientSocket.Send(data);
}
服务端代码
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Server
{
class Program
{
static Socket serverSocket;
static void Main(string[] args)
{
StartServer();
//暂停
Console.ReadKey();
}
/// <summary>
/// 开启一个Socket
/// </summary>
static void StartServer()
{
//实例化一个Socket
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//设置IP
IPAddress ipAdress = IPAddress.Parse("127.0.0.1");
//设置网络终结点
IPEndPoint iPEndPoint = new IPEndPoint(ipAdress, 88);
//绑定ip和端口号
serverSocket.Bind(iPEndPoint);
//等待队列(开始监听端口号)
serverSocket.Listen(0);
//异步接受客户端连接
serverSocket.BeginAccept(AcceptCallBack, serverSocket);
}
/// <summary>
/// 发送数据到客户端
/// </summary>
/// <param name="toClientsocket">用以连接客户端的Socket</param>
/// <param name="msg">要传递的数据</param>
static void SendMessagesToClient(Socket toClientsocket,string msg)
{
//只能传递byte数组
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
toClientsocket.Send(data);
}
/// <summary>
/// 接收来自客户端的数据
/// </summary>
/// <param name="toClientsocket"></param>
static void ReceiveMessages(Socket toClientsocket)
{
byte[] data = new byte[1024];
int count = toClientsocket.Receive(data);
string msg = Encoding.UTF8.GetString(data, 0, count);
Console.WriteLine("{0} {1}", "收到来自客户端的消息:", msg);
}
/// <summary>
/// 当客户端连接到服务器时执行的回调函数
/// </summary>
/// <param name="ar"></param>
static void AcceptCallBack(IAsyncResult ar)
{
Console.WriteLine("一个客户端连接进来了。");
//这里获取到的是向客户端收发消息的Socket
Socket toClientsocket = serverSocket.EndAccept(ar);
//要向客户端发送的消息
string msg = "Hello client!你好。";
//发送消息
SendMessagesToClient(toClientsocket, msg);
//接收客户端传来的消息
ReceiveMessages(toClientsocket);
}
}
}
客户端代码
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace ClientTest
{
class Program
{
//声明客户端
static Socket clientSocket;
static void Main(string[] args)
{
StartClient();
ReceiveMessages();
SendMessagetoServer("Hello Server!你好。");
Console.ReadKey();
}
/// <summary>
/// 开启客户端并连接到服务器端
/// </summary>
static void StartClient()
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 88));
}
/// <summary>
/// 接收来自服务端的消息
/// </summary>
static void ReceiveMessages()
{
byte[] data = new byte[1024];
int count = clientSocket.Receive(data);
string msg = Encoding.UTF8.GetString(data, 0, count);
Console.WriteLine("{0} {1}", "收到来自服务器的消息:", msg);
}
/// <summary>
/// 发送信息到服务端
/// </summary>
/// <param name="msg">要发送的信息</param>
static void SendMessagetoServer(string msg)
{
//将字符串转为byte数组
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
//发送到服务器
clientSocket.Send(data);
}
}
}
运行结果