请问,这个Socket编程,不太懂呢?

dsre3fr32 2012-04-24 12:04:30
此例来自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();
}
}

我就不懂,自己电脑怎么能和自己电脑连接啊?什么意思啊?
...全文
189 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mizuho_2006 2012-04-24
  • 打赏
  • 举报
回复
是两个程序(Socket客户端和服务端)之间的通信,而不是写在一个程序里。
mizuho_2006 2012-04-24
  • 打赏
  • 举报
回复
可以和本机连接,但是不能设置成127.0.0.1,要设成真正的IP地址。而且要注意服务端和客户端的端口号必须一致。
orochiheart 2012-04-24
  • 打赏
  • 举报
回复
我理解是:在自己机器上的服务器程序和客户端程序相连的意思
pmars 2012-04-24
  • 打赏
  • 举报
回复
服务器和客户端是两个程序!囧!
test2050 2012-04-24
  • 打赏
  • 举报
回复
端口,自己电脑没错,但是程序中有server和client的概念。 通过Port进行通讯
qldsrx 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 9 楼 的回复:

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

只是客户端代码?可是代码中,连接对象就是本地连接点啊,况且,如果没有服务端程序,也不应该连接上啊
[/Quote]
仔细一看,你那个是连接的Http服务,如果你本地没有开启IIS服务的话,这个客户端也连接不上的。
avi9111 2012-04-24
  • 打赏
  • 举报
回复
自己连自己正常呀

请求端和接收端都是本机

听太多bs,cs了吧

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

一个请求,向服务器群发请求,不知道接收端是哪台机,可能本机也可以作成服务器,本机有空闲,不就由本机接收咯
dsre3fr32 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

你给的只是客户端代码,缺少服务端代码,要2个项目一起开启才能测试效果。
[/Quote]
只是客户端代码?可是代码中,连接对象就是本地连接点啊,况且,如果没有服务端程序,也不应该连接上啊
mizuho_2006 2012-04-24
  • 打赏
  • 举报
回复
楼上说的都没错。
qldsrx 2012-04-24
  • 打赏
  • 举报
回复
你给的只是客户端代码,缺少服务端代码,要2个项目一起开启才能测试效果。
dsre3fr32 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

socket不等价与你的电脑或者你的程序,一个电脑(或一个程序)可以有很多socket,一个socket包括ip和端口(port),只要端口不一样你的电脑就可以把socket区分开来(端口复用还可以达到多个socket共用一个端口port),tempsocket.Connect(ipe)就是用你这个tempsocket通过tcp连接另一个已监听的socket,所以socket连接只是两个sock……
[/Quote]
就算你说的Socket连接是两个Socket之间的连接,那代码中,不是只有一个Socket吗?哪里显示出的是两个Socket呢?
kkgoose 2012-04-24
  • 打赏
  • 举报
回复
socket不等价与你的电脑或者你的程序,一个电脑(或一个程序)可以有很多socket,一个socket包括ip和端口(port),只要端口不一样你的电脑就可以把socket区分开来(端口复用还可以达到多个socket共用一个端口port),tempsocket.Connect(ipe)就是用你这个tempsocket通过tcp连接另一个已监听的socket,所以socket连接只是两个socket之间的连接,而不是两个电脑之间的连接,虽然大都数情况都是用于不同电脑间的通讯。去看看tcp/ip五层协议吧
dsre3fr32 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

是两个程序(Socket客户端和服务端)之间的通信,而不是写在一个程序里。
[/Quote]
上面的代码,就是写在一个程序里的啊,可以直接运行

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧