当前位置:   article > 正文

基于tcp协议的c#服务器及客户端代码_请描述c#中tcp客户端的关键步骤和代码

请描述c#中tcp客户端的关键步骤和代码

服务器代码:

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() + “\r\n”);
//把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} :\r\n”, 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();
}
}
}
}

服务器接收显示在这里插入图片描述
客户端发送显示
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/216984
推荐阅读
相关标签
  

闽ICP备14008679号