代码:
server端:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketTestServer
{
class Server
{
/// <summary>
/// 服务器套接字
/// </summary>
private static Socket _serverSocket;
/// <summary>
/// 服务器IP地址
/// </summary>
private static IPAddress _ip ;
private static Socket _clientSocket;
private static byte[] _receiveMessage = new byte[1024];
static void Main(string[] args)
{
//将字符串转换为IP地址
_ip=IPAddress.Parse("10.0.12.17");
//创建服务器套接字
_serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//给套接字绑定IP地址和端口号
_serverSocket.Bind(new IPEndPoint(_ip,8888));
_serverSocket.Listen(5);//最多挂起5个客户端套接字连接
Console.Write("成功启动监听{0}\n",_serverSocket.LocalEndPoint);
//获取连接的客户端套接字
_clientSocket = _serverSocket.Accept();
SendMessage();
//必须一直接收消息,否则只会接收一条消息;Receive与Listen对应,限制侦听的套接字
while (true)
{
GetMessage();
}
}
private static void SendMessage()
{
_clientSocket.Send(Encoding.ASCII.GetBytes("Hello client!\n"));
Console.Write("向客户端发送消息:Hello client!\n\n");
}
private static void GetMessage()
{
int bytenumber = _clientSocket.Receive(_receiveMessage);
try
{
Console.Write("接收客户端{0}消息:\n{1}", _clientSocket.RemoteEndPoint, Encoding.ASCII.GetString(_receiveMessage,0, bytenumber));
}
catch (Exception e)
{
Console.Write(e.Message);
_clientSocket.Shutdown(SocketShutdown.Both);
_clientSocket.Close();
}
}
}
}
Client端:
using System;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace SocketTestClient
{
class Client
{
private static byte[] _receiveMessage = new byte[1024];
static void Main(string[] args)
{
Socket clientSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
clientSocket.Connect("10.0.12.17", 8888);
Console.Write("连接服务器成功\n");
}
catch
{
Console.Write("连接服务器失败\n");
return;
}
int byteNumber = clientSocket.Receive(_receiveMessage);
//必须发送正确的字节数,否则会发送很多空字节
Console.Write("接收服务器消息:{0}\n",Encoding.ASCII.GetString(_receiveMessage,0, byteNumber));
for (int i = 0; i < 10; i++)
{
try
{
string message = "Hello server!The time is:" + DateTime.Now + "\n";//不能正确发送中文
clientSocket.Send(Encoding.ASCII.GetBytes(message));
Console.Write("向服务器发送消息:{0}", message);
Thread.Sleep(1000);
}
catch
{
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
Console.Write("发送失败,按回车键退出");
break;
}
}
Console.Write("发送完毕,按回车键退出");
Console.Read();
}
}
}
参考: