Vale ya se me ocurre, y seguramente sea eso. El socket que intentas abrir ya está reservado por el sistema, fíjate si no existe otro proceso escuchando en el puerto 80.
Si fuese el caso y necesitarás dicho proceso, podrías aplicar la técnica de TCP port stealing la cual permite bindear/asociarse al mismo puerto que otra aplicación, aunque creo que había que especificar una flag para reutilizar el socket.
No tiene que ver con el fallo en cuestión, pero en el code de tu server después de hacer Listen intentas conectar, cosa que arrojará una excepción ya que el socket está siendo utilizado para la escucha. Para eso tienes el cliente, que será otro .exe u otro hilo/subproceso dentro del mismo proceso.
Ya tienes para probar.. Y recuerda, si el server escucha, no conectes desde el mismo.
Saludos.
Gracias por la ayuda.
Al parecer no me dejaba acceder por que el IIS ocupaba el puerto 80.
Ahora parece funcionar debidamente.
Dejo aquí el código para utilidad.
Cliente:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Client
{
class Program
{
static void Main(string[] args)
{
Socket sck
= new Socket
(AddressFamily
.InterNetwork, SocketType
.Stream, ProtocolType
.Tcp);
IPEndPoint endPoint
= new IPEndPoint
(IPAddress
.Parse("127.0.0.1"),
80); sck.Connect(endPoint);
Console.WriteLine("Introduzca su mensaje:");
string msg = Console.ReadLine();
byte[] msgBuffer = Encoding.Default.GetBytes(msg);
sck.Send(msgBuffer, 0, msgBuffer.Length, 0);
byte[] buffer
= new byte[255];
int rec = sck.Receive(buffer, 0, buffer.Length, 0);
Array.Resize(ref buffer, rec);
Console.WriteLine("Servidor: {0}", Encoding.Default.GetString(buffer));
Console.ReadKey();
}
}
}
Servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Server
{
class Program
{
static void Main(string[] args)
{
Socket sck
= new Socket
(AddressFamily
.InterNetwork, SocketType
.Stream, ProtocolType
.Tcp);
IPEndPoint endPoint
= new IPEndPoint
(IPAddress
.Parse("127.0.0.1"),
80); sck.Bind(endPoint);
Console.WriteLine("Conectando...");
System.Threading.Thread.Sleep(1000);
sck.Listen(0);
Console.WriteLine("Se ha conectado correctamente.");
Socket acc = sck.Accept();
byte[] buffer = Encoding.Default.GetBytes("Hola Client!");
acc.Send(buffer, 0, buffer.Length, 0);
int rec = acc.Receive(buffer, 0, buffer.Length, 0);
Array.Resize(ref buffer, rec);
Console.WriteLine("Cliente: {0}", Encoding.Default.GetString(buffer));
sck.Close();
acc.Close();
Console.ReadKey();
}
}
}
Lo que da un resultado similar a este:
Saludos.