using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace TCP_DEMO_Recv2 {
static class Program {
public static string Tcpport = "5021";
static void Main(string[] args) {
InitTcp_Sync();
Console.ReadKey();
}
#region TCP
// ReSharper disable once FunctionRecursiveOnAllPaths
public static void InitTcp_Sync() {
try {
var sip = Expand.GetIp;
var sprot = int.Parse(Tcpport);
Log(LogType.Open, "TCP Servise IP." + sip);
Log(LogType.Open, "TCP Servise Port." + sprot);
var ipEnd = new IPEndPoint(IPAddress.Any, sprot);
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
socket.Bind(ipEnd);
socket.Listen(10);
Log(LogType.Open, "Waiting for a client");
using (var client = socket.Accept()) {
var ipEndClient = (IPEndPoint)client.RemoteEndPoint;
var cip = ipEndClient.Address;
var cport = ipEndClient.Port;
Log(LogType.Recv, "IPEndPoint.IP = " + cip);
Log(LogType.Recv, "IPEndPoint.Port = " + cport);
var data = Encoding.Default.GetBytes("connection succeeded");
client.Send(data, data.Length, SocketFlags.None);
while (true) {
data = new byte[1024];
var recv = client.Receive(data);
if (recv == 0) break;
Log(LogType.Recv, Encoding.Default.GetString(data, 0, recv));
client.Send(data, recv, SocketFlags.None);
Log(LogType.Send, Encoding.Default.GetString(data, 0, recv));
}
Log(LogType.Open, $"Disconnect form {cip}:{cport}");
}
}
InitTcp_Sync();
} catch (Exception ex) {
Log(LogType.Error, ex.Message);
InitTcp_Sync();
Console.ReadKey();
}
}
#endregion
private static void Log(LogType t, string msg) {
Console.Write($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:fff} [{t}] { msg}{Environment.NewLine}");
}
private enum LogType {
Open,
Send,
Recv,
Error,
Info,
}
}
public static class Expand {
public static string GetIp {
get {
var localIp = "";
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList) { if (ip.AddressFamily.ToString() == "InterNetwork") localIp = ip.ToString(); }
return localIp;
}
}
}
}