概述
服务器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
namespace client
{
class Program
{
private const int portnum = 102;
static void Main(string[] args)
{
//定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议)
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string ip = “”;
string hostInfo = Dns.GetHostName(); //Dns 域名服务器,获取本地计算机的ip,
//为addressList
System.Net.IPAddress[] addressList = Dns.GetHostEntry(hostInfo).AddressList;
for (int i = 0; i < addressList.Length; i++)
{
ip = addressList[i].ToString();
}
Console.WriteLine("the ip is: " + ip); //打印本网络下的ip
Console.Write(“the port is: " + portnum.ToString() + “rn”);
//把ip按照 ‘.’ 分割开。
string[] IPArray = ip.Split(new char[] { ‘.’ });
//再把分割开的string类型转换为byte类型。
byte IP0 = Convert.ToByte(IPArray[0]);
byte IP1 = Convert.ToByte(IPArray[1]);
byte IP2 = Convert.ToByte(IPArray[2]);
byte IP3 = Convert.ToByte(IPArray[3]);
//ip绑定成new byte[] { 192,168,43,249 }这样。
IPAddress ipaddress = new IPAddress(new byte[] { IP0, IP1, IP2, IP3 });
EndPoint point = new IPEndPoint(ipaddress, portnum);//ipendpoint是对ip+端口做了一层封装的类
//向操作系统申请一个可用的ip跟端口号 用来做通信
tcpServer.Bind(point);
//将套接字的监听队列长度限制为20
tcpServer.Listen(20);
//3,开始监听 (等待客户端连接)
//把 连接的客户端保存起来
List lst = new List();
//创建一个监听线程
Socket clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接过来,之后进行下面的代码
//将当前连接的客户端加入到lst列表中
lst.Add(clientSocket);
while (true)
{
//while (true)可以解决tcp协议三次握手定理造成的不稳定,新建一个连接
Console.WriteLine(“连接来自: " + clientSocket.RemoteEndPoint);
// 发送信息给已连接的当前lst[0]客户端
string data3 = “CMD_LED_1_0”;
byte[] byteArray = System.Text.Encoding.Default.GetBytes(data3);
lst[0].Send(byteArray);
//接收客户端信息
byte[] data2 = new byte[1024 * 1024];//创建一个字节数组用来当做容器,去承接客户端发送过来的数据
int length = clientSocket.Receive(data2);
string message2 = Encoding.UTF8.GetString(data2, 0, length);//把字节数据转化成 一个字符串
string logLine = System.String.Format(”{0:G} :rn”, System.DateTime.Now);
Console.WriteLine(logLine);
Console.WriteLine(“客户端” + “[” + clientSocket.RemoteEndPoint + “]” + “所发布的信息:” + message2);
}
}
}
}
客户端代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace tcp
{
class Program
{
private const int portnum = 102;
private const string hostname = “192.168.43.249”;
//hostname是服务器当前网络下的ip
static void Main(string[] args)
{
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(hostname, portnum);
//Connect方法使用指定的IP地址和端口号将客户端连接到远程TCP主机
Console.WriteLine(“Connect Complete”);
try
{
if (clientSocket.Connected)
{
// 如果客户与服务器有连接,并且还未断,则允许发送信息
if (clientSocket != null)
{
while (true)
{
Console.WriteLine(“Input string:”);
//获取黑框上的输入字符串
String str = Console.ReadLine();
// 用UTF8格式来将string信息转化成byte数组形式
byte[] byData = System.Text.Encoding.UTF8.GetBytes(str);
// 发送数据
clientSocket.Send(byData);
Console.WriteLine(“Send Complete”);
}
}
}
}
catch (Exception e)
{
Console.WriteLine(“Error!” + e.StackTrace);
Console.ReadLine();
}
}
}
}
服务器接收显示
客户端发送显示
最后
以上就是时尚柜子为你收集整理的基于tcp协议的c#服务器及客户端代码的全部内容,希望文章能够帮你解决基于tcp协议的c#服务器及客户端代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复