TCP/IP客户端和服务器的基本使用和参考
TCP/IP Client and Server basic using and references
我已经将 VS15 NuGet Packeges
中的 TCP/IP
安装到我的项目中,在参考资料中它是 SimpleTCP
,我已经重建了项目,但是对于 SimpleTcpClient client;
它说:
Suppression State Error CS0246 The type or namespace name
'SimpleTcpServer' could not be found (are you missing a using
directive or an assembly reference?)
不确定是什么原因造成的,也许我错过了一些参考资料甚至没有使用。
客户:
using System;
using System.Text;
using System.Windows.Forms;
namespace Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SimpleTcpClient client;
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
}
private void button2_Click(object sender, EventArgs e)
{
client.WriteLineAndGetReplay(txtMessage.Text, TimeSpan.FromSeconds(5));
}
private void Form1_Load(object sender, EventArgs e)
{
client = new SimpleTcpClient();
client.StringEncoder = Encoding.UTF8;
client.DataRecevived += Client_DataReceived;
}
private void Client_DataReceived(object sender, SimpleTCP.Message e)
{
textBox1.Invoke((MethodInvoker)delegate ()
{
textBox1.Text += e.MessageString;
});
}
}
}
服务器:
using System;
using System.Text;
using System.Windows.Forms;
namespace Server
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SimpleTcpServer server;
private void Form1_Load(object sender, EventArgs e)
{
server = new SimpleTcpServer();
server.Delimeter = 0x13;
server.StringEncoder = Encoding.UTF8;
server.DataReceived += Server_DataReceived;
}
private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
txtStatus.Invoke((MethodInvoker)delegate ()
{
txtStatus.Text += e.MessageString;
e.ReplyLine(string.Format("You said: {0}", e.MessageString));
});
}
private void btnStart_Click(object sender, EventArgs e)
{
txtStatus.Text += "Server starting...";
System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text));
server.Start(ip, Convert.ToInt32(txtPort.Text));
}
private void btnStop_Click(object sender, EventArgs e)
{
if (server.IsStarted)
{
server.Stop();
}
}
}
}
为了回答您的问题,您收到此错误是因为您没有在代码中包含 using SimpleTCP;
。
每个表单的开头应如下所示:
using SimpleTCP;
using System;
using System.Net;
using System.Windows.Forms;
话虽如此,代码仍然存在一些问题。
您的客户表格中没有 client.Connect(IP, PORT);
。为了创建 server < > client
连接,必须有一个监听服务器和一个客户端连接到它。在你的情况下,只有一个监听服务器。
在您的 server
表单中,您应该改为调用 IPAddress.Parse()
。使用示例:IPAddress.Parse("127.0.0.1");
您不需要 Invoke
任何 Form
成员,因为您没有使用任何类型的多线程,除非 SimpleTCP
通过默认,这不太可能。
此外,整个项目似乎一团糟。如果您仍处于起步阶段,我强烈建议您使用 Console Application
,因为它们更加宽容且使用起来相当简单。
我还建议您进一步了解 C# events 及其工作原理。
这是一个 server < > client
项目,使用 SimpleTCP
、您的配置和 Console Application
来帮助您入门。
服务器:
using System;
using System.Net;
using SimpleTCP;
using System.Text;
namespace server
{
class Program
{
static void Main(string[] args)
{
SimpleTcpServer server = new SimpleTcpServer(); //Instantiate server.
server.Delimiter = 0x13; //Config
server.StringEncoder = Encoding.UTF8; //Config
server.DataReceived += Server_DataReceived; //Subscribe to DataRecieved event.
IPAddress ip = IPAddress.Parse("127.0.0.1"); //IP Address using .Parse()
int port = 6500; //Port number
server.Start(ip, port); //Start listening to incoming connections and data.
Console.ReadKey(); //Pause the console.
}
static void Server_DataReceived(object sender, SimpleTCP.Message m)
{
Console.WriteLine(m.MessageString); //Write message to console.
string replyMessage = String.Format("You said {0}", m.MessageString); //This is the reply message
m.ReplyLine(replyMessage); //Send reply message back to client.
}
}
}
客户:
using System;
using System.Net;
using SimpleTCP;
using System.Text;
namespace client
{
class Program
{
static void Main(string[] args)
{
SimpleTcpClient client = new SimpleTcpClient(); //Instantiate the client
client.StringEncoder = Encoding.UTF8; //Config
client.DataReceived += Client_DataReceived; //Subscribe to the DataRecieved event.
client.Connect("127.0.0.1", 6500); //Connect to the server
while(true) //Keep the console open until you close it.
{
//As long as the console is open, every message you type will be sent to the server.
client.WriteLineAndGetReply(Console.ReadLine(), TimeSpan.FromSeconds(5));
}
}
static void Client_DataReceived(object sender, Message m)
{
Console.WriteLine(m.MessageString); //Write recieved reply from server to console.
}
}
}
希望对你的旅途有所帮助,祝你好运!
它有点旧,但我想这会很有趣。
我来这里是因为我看了一个 youtube 视频 (https://www.youtube.com/watch?v=ve2LX1tOwIM),上面的代码完全一样。
视频中的问题是我猜被剪掉了,有一部分代码是看不到的。在视频的客户端代码中,如问题上面的代码中,有些行没有完全显示。它似乎缺少行 client.Connect(TxtHost.Text, Convert.ToInt32(TxtPort.Text));
即使在服务器事件 btnStart_Click 中,该视频也存在错误,其中首先显示代码 System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text) );如上面的服务器代码。我什至为此在调试中遇到错误,观看接近尾声的视频可能代码已更改(但它没有显示在所有视频中......)在此 System.Net.IPAddress ip = System.Net.IPAddress 中。解析(TxtHost.Text);
对于完全来自该视频的人,我 post 完整的代码,包括这些更正和一些其他更改:
客户:
using SimpleTCP;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TelnetClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SimpleTcpClient client;
private void BtnConnect_Click(object sender, EventArgs e)
{
try
{
//System.Net.IPAddress ip = System.Net.IPAddress.Parse(TxtHost.Text);
client.Connect(TxtHost.Text, Convert.ToInt32(TxtPort.Text));
BtnConnect.Enabled = false;
BtnClose.Enabled = true;
BtnSend.Enabled = true;
TxtHost.Enabled = false;
TxtPort.Enabled = false;
TxtMessages.Enabled = true;
}
catch (Exception)
{
TxtStatus.Text = "Error during connection... please check host and port...";
TxtStatus.AppendText(Environment.NewLine);
}
}
private void Form1_Load(object sender, EventArgs e)
{
client = new SimpleTcpClient();
client.StringEncoder = Encoding.UTF8;
client.DataReceived += Client_DataReceived;
}
private void Client_DataReceived(object sender, SimpleTCP.Message e)
{
TxtStatus.Invoke((MethodInvoker)delegate ()
{
TxtStatus.Text += e.MessageString;
TxtStatus.AppendText(Environment.NewLine);
});
}
private void BtnSend_Click(object sender, EventArgs e)
{
//client.WriteLineAndGetReply(TxtMessages.Text, TimeSpan.FromSeconds(3));
client.WriteLineAndGetReply(TxtMessages.Text, TimeSpan.FromSeconds(0));
TxtMessages.Text = "";
}
private void BtnClose_Click(object sender, EventArgs e)
{
try
{
client.Disconnect();
BtnConnect.Enabled = true;
BtnClose.Enabled = false;
BtnSend.Enabled = false;
TxtHost.Enabled = true;
TxtPort.Enabled = true;
TxtMessages.Enabled = false;
TxtMessages.Text = "";
}
catch (Exception)
{
TxtStatus.Text = "Error during closing connection...";
TxtStatus.AppendText(Environment.NewLine);
}
}
}
}
服务器:
using SimpleTCP;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TelnetServer
{
public partial class TelnetServer : Form
{
public TelnetServer()
{
InitializeComponent();
}
SimpleTcpServer server;
private void TelnetServer_Load(object sender, EventArgs e)
{
server = new SimpleTcpServer();
server.Delimiter = 0x13;//enter
server.StringEncoder = Encoding.UTF8;
server.DataReceived += Server_DataReceived;
}
private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
TxtStatus.Invoke((MethodInvoker)delegate ()
{
TxtStatus.Text += e.MessageString;
TxtStatus.AppendText(Environment.NewLine);
//e.ReplyLine(String.Format("You said: {0}", e.MessageString));
server.Broadcast(e.MessageString);
});
}
private void BtnStart_Click(object sender, EventArgs e)
{
try
{
System.Net.IPAddress ip = System.Net.IPAddress.Parse(TxtHost.Text);
//System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(TxtHost.Text));
server.Start(ip, Convert.ToInt32(TxtPort.Text));
TxtStatus.Text = "Server starting...";
TxtStatus.AppendText(Environment.NewLine);
BtnStart.Enabled = false;
BtnStop.Enabled = true;
TxtHost.Enabled = false;
TxtPort.Enabled = false;
}
catch (Exception)
{
TxtStatus.Text = "Error during starting... please check host and port...";
TxtStatus.AppendText(Environment.NewLine);
}
}
private void BtnStop_Click(object sender, EventArgs e)
{
BtnStart.Enabled = true;
BtnStop.Enabled = false;
TxtHost.Enabled = true;
TxtPort.Enabled = true;
if (server.IsStarted)
server.Stop();
TxtStatus.Text = "Server stopped... ";
TxtStatus.AppendText(Environment.NewLine);
}
}
}
我已经将 VS15 NuGet Packeges
中的 TCP/IP
安装到我的项目中,在参考资料中它是 SimpleTCP
,我已经重建了项目,但是对于 SimpleTcpClient client;
它说:
Suppression State Error CS0246 The type or namespace name 'SimpleTcpServer' could not be found (are you missing a using directive or an assembly reference?)
不确定是什么原因造成的,也许我错过了一些参考资料甚至没有使用。
客户:
using System;
using System.Text;
using System.Windows.Forms;
namespace Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SimpleTcpClient client;
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
}
private void button2_Click(object sender, EventArgs e)
{
client.WriteLineAndGetReplay(txtMessage.Text, TimeSpan.FromSeconds(5));
}
private void Form1_Load(object sender, EventArgs e)
{
client = new SimpleTcpClient();
client.StringEncoder = Encoding.UTF8;
client.DataRecevived += Client_DataReceived;
}
private void Client_DataReceived(object sender, SimpleTCP.Message e)
{
textBox1.Invoke((MethodInvoker)delegate ()
{
textBox1.Text += e.MessageString;
});
}
}
}
服务器:
using System;
using System.Text;
using System.Windows.Forms;
namespace Server
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SimpleTcpServer server;
private void Form1_Load(object sender, EventArgs e)
{
server = new SimpleTcpServer();
server.Delimeter = 0x13;
server.StringEncoder = Encoding.UTF8;
server.DataReceived += Server_DataReceived;
}
private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
txtStatus.Invoke((MethodInvoker)delegate ()
{
txtStatus.Text += e.MessageString;
e.ReplyLine(string.Format("You said: {0}", e.MessageString));
});
}
private void btnStart_Click(object sender, EventArgs e)
{
txtStatus.Text += "Server starting...";
System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text));
server.Start(ip, Convert.ToInt32(txtPort.Text));
}
private void btnStop_Click(object sender, EventArgs e)
{
if (server.IsStarted)
{
server.Stop();
}
}
}
}
为了回答您的问题,您收到此错误是因为您没有在代码中包含 using SimpleTCP;
。
每个表单的开头应如下所示:
using SimpleTCP;
using System;
using System.Net;
using System.Windows.Forms;
话虽如此,代码仍然存在一些问题。
您的客户表格中没有
client.Connect(IP, PORT);
。为了创建server < > client
连接,必须有一个监听服务器和一个客户端连接到它。在你的情况下,只有一个监听服务器。在您的
server
表单中,您应该改为调用IPAddress.Parse()
。使用示例:IPAddress.Parse("127.0.0.1");
您不需要
Invoke
任何Form
成员,因为您没有使用任何类型的多线程,除非SimpleTCP
通过默认,这不太可能。
此外,整个项目似乎一团糟。如果您仍处于起步阶段,我强烈建议您使用 Console Application
,因为它们更加宽容且使用起来相当简单。
我还建议您进一步了解 C# events 及其工作原理。
这是一个 server < > client
项目,使用 SimpleTCP
、您的配置和 Console Application
来帮助您入门。
服务器:
using System;
using System.Net;
using SimpleTCP;
using System.Text;
namespace server
{
class Program
{
static void Main(string[] args)
{
SimpleTcpServer server = new SimpleTcpServer(); //Instantiate server.
server.Delimiter = 0x13; //Config
server.StringEncoder = Encoding.UTF8; //Config
server.DataReceived += Server_DataReceived; //Subscribe to DataRecieved event.
IPAddress ip = IPAddress.Parse("127.0.0.1"); //IP Address using .Parse()
int port = 6500; //Port number
server.Start(ip, port); //Start listening to incoming connections and data.
Console.ReadKey(); //Pause the console.
}
static void Server_DataReceived(object sender, SimpleTCP.Message m)
{
Console.WriteLine(m.MessageString); //Write message to console.
string replyMessage = String.Format("You said {0}", m.MessageString); //This is the reply message
m.ReplyLine(replyMessage); //Send reply message back to client.
}
}
}
客户:
using System;
using System.Net;
using SimpleTCP;
using System.Text;
namespace client
{
class Program
{
static void Main(string[] args)
{
SimpleTcpClient client = new SimpleTcpClient(); //Instantiate the client
client.StringEncoder = Encoding.UTF8; //Config
client.DataReceived += Client_DataReceived; //Subscribe to the DataRecieved event.
client.Connect("127.0.0.1", 6500); //Connect to the server
while(true) //Keep the console open until you close it.
{
//As long as the console is open, every message you type will be sent to the server.
client.WriteLineAndGetReply(Console.ReadLine(), TimeSpan.FromSeconds(5));
}
}
static void Client_DataReceived(object sender, Message m)
{
Console.WriteLine(m.MessageString); //Write recieved reply from server to console.
}
}
}
希望对你的旅途有所帮助,祝你好运!
它有点旧,但我想这会很有趣。 我来这里是因为我看了一个 youtube 视频 (https://www.youtube.com/watch?v=ve2LX1tOwIM),上面的代码完全一样。 视频中的问题是我猜被剪掉了,有一部分代码是看不到的。在视频的客户端代码中,如问题上面的代码中,有些行没有完全显示。它似乎缺少行 client.Connect(TxtHost.Text, Convert.ToInt32(TxtPort.Text)); 即使在服务器事件 btnStart_Click 中,该视频也存在错误,其中首先显示代码 System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text) );如上面的服务器代码。我什至为此在调试中遇到错误,观看接近尾声的视频可能代码已更改(但它没有显示在所有视频中......)在此 System.Net.IPAddress ip = System.Net.IPAddress 中。解析(TxtHost.Text);
对于完全来自该视频的人,我 post 完整的代码,包括这些更正和一些其他更改:
客户:
using SimpleTCP;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TelnetClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SimpleTcpClient client;
private void BtnConnect_Click(object sender, EventArgs e)
{
try
{
//System.Net.IPAddress ip = System.Net.IPAddress.Parse(TxtHost.Text);
client.Connect(TxtHost.Text, Convert.ToInt32(TxtPort.Text));
BtnConnect.Enabled = false;
BtnClose.Enabled = true;
BtnSend.Enabled = true;
TxtHost.Enabled = false;
TxtPort.Enabled = false;
TxtMessages.Enabled = true;
}
catch (Exception)
{
TxtStatus.Text = "Error during connection... please check host and port...";
TxtStatus.AppendText(Environment.NewLine);
}
}
private void Form1_Load(object sender, EventArgs e)
{
client = new SimpleTcpClient();
client.StringEncoder = Encoding.UTF8;
client.DataReceived += Client_DataReceived;
}
private void Client_DataReceived(object sender, SimpleTCP.Message e)
{
TxtStatus.Invoke((MethodInvoker)delegate ()
{
TxtStatus.Text += e.MessageString;
TxtStatus.AppendText(Environment.NewLine);
});
}
private void BtnSend_Click(object sender, EventArgs e)
{
//client.WriteLineAndGetReply(TxtMessages.Text, TimeSpan.FromSeconds(3));
client.WriteLineAndGetReply(TxtMessages.Text, TimeSpan.FromSeconds(0));
TxtMessages.Text = "";
}
private void BtnClose_Click(object sender, EventArgs e)
{
try
{
client.Disconnect();
BtnConnect.Enabled = true;
BtnClose.Enabled = false;
BtnSend.Enabled = false;
TxtHost.Enabled = true;
TxtPort.Enabled = true;
TxtMessages.Enabled = false;
TxtMessages.Text = "";
}
catch (Exception)
{
TxtStatus.Text = "Error during closing connection...";
TxtStatus.AppendText(Environment.NewLine);
}
}
}
}
服务器:
using SimpleTCP;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TelnetServer
{
public partial class TelnetServer : Form
{
public TelnetServer()
{
InitializeComponent();
}
SimpleTcpServer server;
private void TelnetServer_Load(object sender, EventArgs e)
{
server = new SimpleTcpServer();
server.Delimiter = 0x13;//enter
server.StringEncoder = Encoding.UTF8;
server.DataReceived += Server_DataReceived;
}
private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
TxtStatus.Invoke((MethodInvoker)delegate ()
{
TxtStatus.Text += e.MessageString;
TxtStatus.AppendText(Environment.NewLine);
//e.ReplyLine(String.Format("You said: {0}", e.MessageString));
server.Broadcast(e.MessageString);
});
}
private void BtnStart_Click(object sender, EventArgs e)
{
try
{
System.Net.IPAddress ip = System.Net.IPAddress.Parse(TxtHost.Text);
//System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(TxtHost.Text));
server.Start(ip, Convert.ToInt32(TxtPort.Text));
TxtStatus.Text = "Server starting...";
TxtStatus.AppendText(Environment.NewLine);
BtnStart.Enabled = false;
BtnStop.Enabled = true;
TxtHost.Enabled = false;
TxtPort.Enabled = false;
}
catch (Exception)
{
TxtStatus.Text = "Error during starting... please check host and port...";
TxtStatus.AppendText(Environment.NewLine);
}
}
private void BtnStop_Click(object sender, EventArgs e)
{
BtnStart.Enabled = true;
BtnStop.Enabled = false;
TxtHost.Enabled = true;
TxtPort.Enabled = true;
if (server.IsStarted)
server.Stop();
TxtStatus.Text = "Server stopped... ";
TxtStatus.AppendText(Environment.NewLine);
}
}
}