1. 程式人生 > >Socket通訊——TCP(C#)

Socket通訊——TCP(C#)

伺服器端程式碼

using System;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using Shell32;
namespace ReadDirectory
{
    class Program
    {
        static void Main(string[] args)
        {
            //string path = @"F:\Sofeware\UE4虛幻遊戲引擎初學者指南視訊教程\UE4 Fundamentals - Module 01";
//DirectoryInfo folder = new DirectoryInfo(path); //foreach (FileInfo file in folder.GetFiles("*.class")) { // Console.WriteLine(file.FullName); //} //Program p = new Program(); //p.printVideoAddress(p.videoAddress(path)); int
recv; byte[] data = new byte[1024]; Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 8888); socket.Bind(ipEnd); socket.Listen(10); Console.WriteLine("wating for a client"
); Socket client = socket.Accept(); IPEndPoint ipEndPoint = (IPEndPoint)client.RemoteEndPoint; Console.WriteLine("Connect with {0} at port {1}", ipEndPoint.Address, ipEndPoint.Port); string welcome = "Welcome to my server"; data = Encoding.UTF8.GetBytes(welcome); client.Send(data, data.Length, SocketFlags.None); while (true) { data = new byte[1024]; recv = client.Receive(data); if (recv == 0) break; Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv)); //client.Send(data, recv, SocketFlags.None); } Console.Write("Disconnect form{0}", ipEndPoint.Address); client.Close(); socket.Close(); } // 獲取一個檔案下的每個視訊地址 /* * DirectoryInfo 位於System.IO * @param path : 視訊目錄的地址 * example: * string path = @"E:\File"; * @return List : 儲存視訊地址的容器 */ public List<string> videoAddress(string path) { List<string> list = new List<string>(); DirectoryInfo folder = new DirectoryInfo(path); foreach (FileInfo file in folder.GetFiles("*.mp4")) { list.Add(file.FullName); } // Console.WriteLine(list.Count()); return list; } // 列印檢視 public void printVideoAddress(List<string> list) { foreach (var file in list) { Console.WriteLine(file); } } } }

客戶端程式碼塊


using System;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClientC
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] data = new byte[1024];
            string input, stringData;
            Console.WriteLine("請輸入伺服器IP地址:");
            string stringIP = Console.ReadLine();
            //IPAddress ip = IPAddress.Parse("127.0.0.1");
            IPAddress ip = IPAddress.Parse(stringIP);
            IPEndPoint ipEnd = new IPEndPoint(ip, 8888);
            Socket socket = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            try
            {
                socket.Connect(ipEnd);
            }
            catch (SocketException e) {
                Console.WriteLine("Fail to connect server");
                Console.WriteLine(e.ToString());
                return;
            }
            int rev = socket.Receive(data);
            //stringData = Encoding.ASCII.GetString(data, 0, rev);
            stringData = Encoding.UTF8.GetString(data, 0, rev);
            Console.WriteLine(stringData);
            input = Console.ReadLine();
            data = Encoding.UTF8.GetBytes(input);
            socket.Send(data, data.Length, SocketFlags.None);
            while (true) {
                if (input == "exit")
                    break;
                data = new byte[1024];
                //rev = socket.Receive(data);
                //stringData = Encoding.ASCII.GetString(data, 0, rev);
                //Console.WriteLine(stringData);
                input = Console.ReadLine();
                data = Encoding.UTF8.GetBytes(input);
                //socket.Send(data, rev, 0);
                socket.Send(data, data.Length, SocketFlags.None);
            }
            Console.WriteLine("Disconnect from server");
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }
    }
}

相關推薦

Socket通訊——TCPC#

伺服器端程式碼 using System; using System.Net; using System.Net.Sockets; using System.Collections.Generic; using System.Linq; using Sys

Androin學習筆記四十二:Java android Socket通訊檢測server連線是否斷開

Pre 在利用socket寫通訊程式的時候,想檢測伺服器是否還活著。 從網上找了很多資料,都沒有自己合適的,最後自己想了個辦法,不過也相當於截取了心跳檢測的一部分。 這裡檢測的是遠端server的連線,而不是本地是否連線成功。首先想到socket類的方法isClosed()、isConnected

跨平臺(Windows+Linux)的Socket通訊程式—底層封裝

【摘要】編寫Socket通訊程式是一個老話題。本文重點介紹Windows平臺和Linux平臺Socket通訊的不同,採用C++,編制了一個簡單的跨平臺的Socket通訊庫。 一、Socket通訊的基礎知識 Socket通訊是兩個計算機之間最基本的通訊方法,有TCP和UDP兩

C#Socket通訊基礎非同步Socket通訊TCP伺服器與客戶端

一、效果圖 二、伺服器端程式碼(原始碼下載地址:https://download.csdn.net/download/xiaochenxihua/10748789) using System; using System.Collections.Generic; using System

C#Socket通訊基礎知識非同步Socket通訊TCP

一、Socket通訊基礎 《1》TCP/IP層次模型 這裡只討論重要的四層        01,應用層(Application):應用層是個很廣泛的概念,有一些基本相同的系統級TCP/IP應用以及應用協議,也有許多的企業應用和網際網路應用。http

C#高性能大容量SOCKET並發通訊協議

pad 英文 透明 優勢 sock ase sha dev lac 協議種類 開發Socket程序有兩種協議類型,一種是用文本描述的,類似HTTP協議,定義字符集,好處是兼容性和調試方便,缺點是解析文本會損耗一些性能;一種是用Code加結構體,定義字節順序,好處是性能高,

C#Socket通訊基礎非同步Socket通訊UDP

一、通訊原理參考https://blog.csdn.net/xiaochenXIHUA/article/details/83446031。 非同步通訊解決同步通訊的缺點可以雙向傳送和接收資訊;非同步通訊思路是引入多執行緒機制,在一個程序中使用兩個執行緒,分別處理接收執行緒與傳送執行緒,這種機制稱

C#Socket通訊基礎同步Socket通訊UDP

一、UDP通訊原理 UDP協議使用無連線的套接字,因此不需要再網路裝置之間傳送連線資訊,但是必須用Bind方法繫結到一個本地地址/埠上。 ①建立套接字 ②繫結IP地址和埠作為伺服器端 ③直接使用SendTo/ReceiveFrom來執行操作 注意:同步Socket(UDP)通訊存

二、多執行緒實現簡單的socket通訊例項TCP

1.伺服器端 import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * 類功能描述:先啟動伺服器端,再啟動客戶端 * * @author:*** * @createTime:2018/

一、一個簡單的socket通訊例項TCP

  1.服務端程式碼 import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * 類功能描述:先啟動伺服器端,再啟動客戶端 * * @author:*** * @creat

JAVA——點對面通訊Socket基於TCP/IP協議

點對面通訊(Socket基於TCP/IP協議) 1.要求 大多情況下,網路通訊經常需要多個客戶機同一個伺服器進行通訊,如FTP伺服器是同時接收多個客戶訪問的伺服器。本例介紹點對面通訊,即一個伺服器監聽多個客戶端的請求的通訊。 2.原理 建立多客戶連線的Soc

C#TCP與UDP通訊流程、Tcplistener和Tcpclient進行通訊、UdpClient進行通訊

1.基於Tcp協議的Socket通訊類似於B/S架構,面向連線,不同的是伺服器端可以向客戶端主動的推送訊息 流程順序。可靠性高 (1)建立一個套接字(Socket) (2)繫結伺服器端IP地址及埠號-伺服器端 (3)利用Listen()方法開啟監聽-伺服器端 (4)利用Accep

Socket通訊總結C++實現

文章目錄[隱藏]        因為專案需要,服務端需要一個SOCKET來接收客戶端的請求,好吧,沒辦法度娘哇,結果很多都是linux的例子,功夫不負有心人啊,終於找到個demo,並且客戶端程式碼詳盡,記錄之,以便以後檢視。 一、Socket是什麼    Socket

Socket通訊中粘包分包問題的介紹和解決C#

最近在做Unity區域網時,用到了Socket通訊基於TCP協議,然後使用非同步方式,主要用到了BeginAccept和BeginReceive方法 然而就可以實現非同步通訊,然而還是要解決粘包和分包問題 這裡我先說明一下什麼是分包和粘包,TCP提供面向連線的、可靠的資料流傳輸,所以當我們傳

C#Socket通訊原理基礎篇

這幾天博主花了4天時間去學習,整理Socket通訊。大致懂了一點,現在我來總結一下關於C#Socket通訊的原理首先我們要知道網路中的程序是如何進行通訊的在本地可以通過程序PID來唯一標識一個程序,但是在網路中這是行不通的。其實TCP/IP協議族已經幫我們解決了這個問題,網路

Android與伺服器端通訊方式之HTTP、TCPSocket

      Android作為客戶端,與伺服器的通訊方式主要有兩種:一種是HTTP通訊,一種是Socket通訊。 一、HTTP、Socket簡介       HTTP通訊:即使用HTTP協議進行通訊,工作原理是客戶端向伺服器端傳送一條HTTP請求,伺服器收到之後先解析客戶

C#基於TCP、UDP協議的網路通訊實現unity

一、TCP協議: TCP協議是面向有連線的,所以伺服器要與客戶端建立連線 伺服器端: using System; using System.Net.Sockets; using System.Net; using System.Text; public static

C++Socket通訊總結C++實現

一、Socket是什麼    Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資

非同步Socket Tcp伺服器實現C#

/// <summary> /// 非同步SOCKET 伺服器 /// </summary> public class AsyncServer : IDisposable { #region Fields /// <

C++ Socket通訊總結C++實現

  因為專案需要,服務端需要一個SOCKET來接收客戶端的請求,好吧,沒辦法度娘哇,結果很多都是linux的例子,功夫不負有心人啊,終於找到個demo,並且客戶端程式碼詳盡,記錄之,以便以後檢視。 一、Socket是什麼    Socket是應用層與TCP/IP協議族