读书人

请教这个Socket编程不太懂呢

发布时间: 2012-04-25 19:32:32 作者: rapoo

请问,这个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个项目一起开启才能测试效果。
------解决方案--------------------


楼上说的都没错。
[解决办法]
自己连自己正常呀

请求端和接收端都是本机

听太多bs,cs了吧

如果要做负载均衡如何做?

一个请求,向服务器群发请求,不知道接收端是哪台机,可能本机也可以作成服务器,本机有空闲,不就由本机接收咯
[解决办法]

探讨
引用:

你给的只是客户端代码,缺少服务端代码,要2个项目一起开启才能测试效果。

只是客户端代码?可是代码中,连接对象就是本地连接点啊,况且,如果没有服务端程序,也不应该连接上啊

读书人网 >C#

热点推荐