日期:2014-05-18  浏览次数:20692 次

请问,这个Socket编程,不太懂呢?
此例来自MSDN的例子:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.aspx

 class Program
  {
  private static Socket ConnectSocket(string server, int port)
  {
  Socket s = null;
  IPHostEntry hostEntry = null;
  hostEntry = Dns.GetHostEntry(server);
  foreach (IPAddress address in hostEntry.AddressList)
  {
  IPEndPoint ipe = new IPEndPoint(address, port);
  Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  tempSocket.Connect(ipe); //自己电脑和自己电脑连接?
  if (tempSocket.Connected)
  {
  s = tempSocket;
  break;
  }
  else
  {
  continue;
  }
  }
  return s;
  }
  private static string SocketSendReceive(string server, int port)
  {
  string request = "GET / HTTP/1.1\r\nHost: " + server +"\r\nConnection: Close\r\n\r\n";
  Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
  Byte[] bytesReceived = new Byte[256];
  Socket s = ConnectSocket(server, port);
  if (s == null)
  return ("Connection failed");
  s.Send(bytesSent, bytesSent.Length, 0);
  int bytes = 0;
  string page = "Default HTML page on " + server + ":\r\n";
  do
  {
  bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
  page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
  }
  while (bytes > 0);
  return page;
  }
  public static void Main(string[] args)
  {
  string host;
  int port = 80;
  if (args.Length == 0)
  host = Dns.GetHostName();
  else
  host = args[0];
  string result = SocketSendReceive(host, port);
  Console.WriteLine(result);
  Console.ReadKey();
  }
  }

我就不懂,自己电脑怎么能和自己电脑连接啊?什么意思啊?

------解决方案--------------------
端口,自己电脑没错,但是程序中有server和client的概念。 通过Port进行通讯
------解决方案--------------------
服务器和客户端是两个程序!囧!
------解决方案--------------------
我理解是:在自己机器上的服务器程序和客户端程序相连的意思
------解决方案--------------------
可以和本机连接,但是不能设置成127.0.0.1,要设成真正的IP地址。而且要注意服务端和客户端的端口号必须一致。
------解决方案--------------------
是两个程序(Socket客户端和服务端)之间的通信,而不是写在一个程序里。
------解决方案--------------------
socket不等价与你的电脑或者你的程序,一个电脑(或一个程序)可以有很多socket,一个socket包括ip和端口(port),只要端口不一样你的电脑就可以把socket区分开来(端口复用还可以达到多个socket共用一个端口port),tempsocket.Connect(ipe)就是用你这个tempsocket通过tcp连接另一个已监听的socket,所以socket连接只是两个socket之间的连接,而不是两个电脑之间的连接,虽然大都数情况都是用于不同电脑间的通讯。去看看tcp/ip五层协议吧
------解决方案--------------------
你给的只是客户端代码,缺少服务端代码,要2个项目一起开启才能测试效果。
------解决方案--------------------