创建TcpClient.cs
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 WpfApp1
{
public class TcpClient
{
static Socket clientSocket;
static String outBufferStr;
static Byte[] outBuffer = new Byte[1024];
static Byte[] inBuffer = new Byte[1024];
private bool isRunning = false;
private int lostConneTime = 0;
private Thread WorkThread = null;
public TcpClient()
{
BuildConnection();
WorkThread = new Thread(WorkFunc);//工作(接收数据)线程
WorkThread.IsBackground = true;
WorkThread.Start();
}
public void BuildConnection()
{
//将网络端点表示为IP地址和端口 用于socket侦听时绑定
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4844); //填写自己电脑的IP或者其他电脑的IP,如果是其他电脑IP的话需将ConsoleApplication_socketServer工程放在对应的电脑上。
clientSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//将Socket连接到服务器
try
{
clientSocket.Connect(ipep);
this.isRunning = true;
}
catch
{
Console.WriteLine("服务器未开启!");
}
}
public void Send(string content)
{
try
{
//发送消息
Console.WriteLine("C# is saying!");
outBuffer = Encoding.ASCII.GetBytes(content);
clientSocket.Send(outBuffer, outBuffer.Length, SocketFlags.None);
}
catch
{
this.lostConneTime += 1;
Console.WriteLine("丢失python连接{0:N0}", this.lostConneTime);
}
if(this.lostConneTime == 10)
{
BuildConnection();
this.lostConneTime = 0;
}
}
private void WorkFunc()
{
while (this.isRunning)
{
if (clientSocket != null)
{
try
{
int recvCount = clientSocket.Receive(inBuffer, 1024, SocketFlags.None);
if (recvCount > 0)
{
string recvMsg = Encoding.UTF8.GetString(inBuffer, 0, recvCount);
AnalysisReceivedMsg(recvMsg);
}
}
catch
{
Thread.Sleep(1000);
}
}
}
}
private void AnalysisReceivedMsg(string content)
{
Console.WriteLine(content);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
TcpClient tcpClient = null;
private System.Windows.Threading.DispatcherTimer dispatcherTimer = null;
public MainWindow()
{
InitializeComponent();
string test = string.Join(" ", new string[] { "5.68,0.0", "5.55,0.41", "5.43,0.81", "5.28,1.18", "5.16,1.54", "5.01,1.87", "4.85,2.17", "4.67,2.44", "4.47,2.67", "4.24,2.84", "3.93,2.93", "3.33,2.74", "0,0" });
tcpClient = new TcpClient();
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(PythonCommu);
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000);
dispatcherTimer.Start();
}
public void PythonCommu(object sender, EventArgs e)
{
tcpClient.Send("I am c#!;");
}
}
}