服务器和客户端的代码都在在vs中编写并运行的,功能上实现了一个客户端和服务器互发消息,如果哪位大神知道多个客户端怎么搞,请留个思路给我,感谢;
服务器的代码:
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.Threading;
namespace 简单通信tcpSever
{
class Program
{
static TcpListener tcplistener;
static TcpClient tcpclient;
static void Main(string[] args)
{
tcplistener = new TcpListener(IPAddress.Parse("127.0.0.1"), 2333);
tcplistener.Start();//开始侦听连接请求
Console.WriteLine("服务器启动");
tcpclient = tcplistener.AcceptTcpClient();//接收来自客户端的连接请求
Console.WriteLine("有一个客户端连接上了");
Thread mythread = new Thread(sendMessageToClient);//接收消息和发送消息都单独开一个线程
mythread.Start();
Thread youthread = new Thread(receiveMessageFromClient);
youthread.Start();
}
//服务器向客户端发送消息
static void sendMessageToClient()
{
while (true)
{
try
{
string sendStr = Console.ReadLine();
byte[] mybyte = new byte[1024];
mybyte = Encoding.UTF8.GetBytes(sendStr);
NetworkStream netS = tcpclient.GetStream();
netS.Write(mybyte, 0, mybyte.Length);
// netS.BeginWrite(mybyte,0,1024,AsyncCallback.Combine,);
}
catch
{
break;
}
}
tcpclient.Close();
}
//接收从客户端发来的消息
static void receiveMessageFromClient()
{
while (true)
{
try
{
NetworkStream ns = tcpclient.GetStream();
byte[]mybyte = new byte[1024];
ns.Read(mybyte,0,1024);
string receiveStr = Encoding.UTF8.GetString(mybyte);
Console.WriteLine("服务器从客户端接收的消息:"+receiveStr);
}
catch
{
break;
}
}
tcpclient.Close();
}
}
}
客户端的代码:
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.Threading;
namespace 简单通信tcpclient
{
class Program
{
static TcpClient tcpclient;
static void Main(string[] args)
{
tcpclient = new TcpClient();
tcpclient.Connect("127.0.0.1",2333);
Thread mythread = new Thread(sendMessageToSever); //接收消息和发送消息都单独开一个线程
mythread.Start();
Thread youthread = new Thread(receiveMessageFromSever);
youthread.Start();
}
//客户端接收消息
static void receiveMessageFromSever()
{
while (true)
{
try
{
NetworkStream ns = tcpclient.GetStream();
byte[] mybyte = new byte[1024];
ns.Read(mybyte, 0, mybyte.Length);
string receiveStr = Encoding.UTF8.GetString(mybyte);
Console.WriteLine("客户端接收来自服务器的消息:" + receiveStr);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
break;
}
}
tcpclient.Close();
}
//客户端发送消息
static void sendMessageToSever()
{
while (true)
{
try
{
string sendStr = Console.ReadLine();
byte[] mybyte = new byte[1024];
mybyte = Encoding.UTF8.GetBytes(sendStr);
NetworkStream netS = tcpclient.GetStream();
netS.Write(mybyte, 0, mybyte.Length);
}
catch
{
break;
}
}
tcpclient.Close();
}
}
}
本人也是最近才开始研究socket通信,这是其中一种方法,以后再出直接使用socket编程的,如果有哪里写的不对或者代码不好的,欢迎交流一二;