日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

C#基于Sockets類實現(xiàn)TCP通訊_C#教程

作者:迎迎一笑 ? 更新時間: 2022-04-11 編程語言

本文實例為大家分享了C#基于Sockets類實現(xiàn)TCP通訊的具體代碼,供大家參考,具體內(nèi)容如下

最終效果

TCPClient

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace TCPClient02
{
? ? public partial class Form1 : Form
? ? {
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? }
? ? ? ? Socket socketSend;
? ? ? ? private void button1_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //Create socket
? ? ? ? ? ? socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
? ? ? ? ? ? IPAddress ip = IPAddress.Parse(textBox1.Text);
? ? ? ? ? ? IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(textBox2.Text));
? ? ? ? ? ? IDInfo idinfo = new IDInfo(); ?//Read ID number information
? ? ? ? ? ? //Get the IP address and port number of the remote server
? ? ? ? ? ? socketSend.Connect(point);
? ? ? ? ? ? ShowMessages("Connection succeeded");

? ? ? ? ? ? //Start a new thread and keep receiving messages sent by the server
? ? ? ? ? ? Thread th = new Thread(ReciveMessages);
? ? ? ? ? ? th.IsBackground = true;
? ? ? ? ? ? th.Start();
? ? ? ? }

? ? ? ? private void button2_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? string str = textBox3.Text.Trim();
? ? ? ? ? ? byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
? ? ? ? ? ? socketSend.Send(buffer);
? ? ? ? }


? ? ? ? void ShowMessages(string str)
? ? ? ? {
? ? ? ? ? ? textBox4.AppendText(str + "\r\n");
? ? ? ? }
? ? ? ? void ReciveMessages()
? ? ? ? {
? ? ? ? ? ? while (true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? byte[] buffer = new byte[1024 * 1024 * 3];
? ? ? ? ? ? ? ? int r = socketSend.Receive(buffer);
? ? ? ? ? ? ? ? if (r == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? string s = Encoding.UTF8.GetString(buffer, 0, r);
? ? ? ? ? ? ? ? ShowMessages(socketSend.RemoteEndPoint + ":" + s);
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? private void Form1_Load(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? Control.CheckForIllegalCrossThreadCalls = false;
? ? ? ? }
? ? }
}

TCPserver

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace TCPserver
{
? ? public partial class Form1 : Form
? ? {
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? }

? ? ? ? private void button1_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //創(chuàng)建一個負責監(jiān)聽的Socket
? ? ? ? ? ? ? ? Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
? ? ? ? ? ? ? ? //創(chuàng)建ip地址和端口號
? ? ? ? ? ? ? ? //IPAddress ip = IPAddress.Parse(textBox1.Text);
? ? ? ? ? ? ? ? IPAddress ip = IPAddress.Any;
? ? ? ? ? ? ? ? IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(textBox2.Text));
? ? ? ? ? ? ? ? //讓負責監(jiān)聽的socket綁定ip地址和端口號
? ? ? ? ? ? ? ? socketWatch.Bind(point);

? ? ? ? ? ? ? ? ShowMsg("監(jiān)聽成功");
? ? ? ? ? ? ? ? //設置監(jiān)聽隊列(某一時刻連接客戶端的最大數(shù)目)
? ? ? ? ? ? ? ? socketWatch.Listen(10);

? ? ? ? ? ? ? ? //線程執(zhí)行的方法
? ? ? ? ? ? ? ? Thread th = new Thread(Listen); ? //服務器開始監(jiān)聽
? ? ? ? ? ? ? ? th.IsBackground = true;
? ? ? ? ? ? ? ? th.Start(socketWatch);

? ? ? ? ? ? }
? ? ? ? ? ? catch
? ? ? ? ? ? {

? ? ? ? ? ? }


? ? ? ? }

? ? ? ? void ShowMsg(string str)
? ? ? ? {
? ? ? ? ? ? textBox3.AppendText(str + "\r\n");

? ? ? ? }

? ? ? ? /// <summary>
? ? ? ? /// 等待客戶端的連接 并且創(chuàng)建與之通信的Socket
? ? ? ? /// </summary>
? ? ? ? ///?
? ? ? ? Socket socketSend;
? ? ? ? void Listen(object o)
? ? ? ? {
? ? ? ? ? ? Socket socketWatch = o as Socket;
? ? ? ? ? ? //負責監(jiān)聽的socket 來接收客戶端的連接 ?
? ? ? ? ? ? //創(chuàng)建跟客戶端通信的socket

? ? ? ? ? ? while (true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? socketSend = socketWatch.Accept();
? ? ? ? ? ? ? ? ? ? ShowMsg(socketSend.RemoteEndPoint.ToString() + "連接成功");
? ? ? ? ? ? ? ? ? ? //開始一個新的線程不斷接受客戶端發(fā)送過來的消息
? ? ? ? ? ? ? ? ? ? Thread th = new Thread(Recive);
? ? ? ? ? ? ? ? ? ? th.IsBackground = true;
? ? ? ? ? ? ? ? ? ? th.Start(socketSend);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch
? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? }


? ? ? ? ? ? }

? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 服務器不斷接受客戶端發(fā)送過來的消息
? ? ? ? /// </summary>
? ? ? ? /// <param name="o"></param>
? ? ? ? void Recive(object o)
? ? ? ? {
? ? ? ? ? ??

? ? ? ? ? ? Socket socketSend = o as Socket;
? ? ? ? ? ? while (true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //客戶端連接成功后,服務器應該接收客戶端發(fā)來的消息
? ? ? ? ? ? ? ? ? ? byte[] buffer = new byte[1024 * 1024 * 2];
? ? ? ? ? ? ? ? ? ? //實際接收到的有效字節(jié)數(shù)
? ? ? ? ? ? ? ? ? ? int bytelen = socketSend.Receive(buffer);
? ? ? ? ? ? ? ? ? ? if (bytelen == 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? string str = Encoding.UTF8.GetString(buffer, 0, bytelen);
? ? ? ? ? ? ? ? ? ? ShowMsg(socketSend.RemoteEndPoint + ":" + str);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch
? ? ? ? ? ? ? ? { ?}
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??

? ? ? ? ? ? }

? ? ? ? }


? ? ? ? private void textBox1_TextChanged(object sender, EventArgs e)
? ? ? ? {

? ? ? ? }

? ? ? ? private void Form1_Load(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? Control.CheckForIllegalCrossThreadCalls = false;
? ? ? ? }

? ? ? ?/// <summary>
? ? ? ?/// 服務器給客戶端發(fā)送消息
? ? ? ?/// </summary>
? ? ? ?/// <param name="sender"></param>
? ? ? ?/// <param name="e"></param>
? ? ? ? private void button3_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? string str = textBox4.Text;
? ? ? ? ? ? byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
? ? ? ? ? ? socketSend.Send(buffer);

? ? ? ? }
? ? }
}

原文鏈接:https://blog.csdn.net/qq_43069920/article/details/119509295

欄目分類
最近更新