电脑主机在不考虑稳定性的前提下是可以用做服务器。1.在电脑主机上安装“IIS”可以实现WEB服务器的功能。
2.IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
3.IIS是Windows中的软件。Win2k/2k3/xp (XP家庭版没有IIS)都可以在“控制面板→添加/删除程序→添加/删除Windows组件→Internet信息服务(IIS)”前的小钩去掉(如有),重新勾选中后按提示操作即可完成IIS组件的添加。用这种方法添加的IIS组件中将包括Web、FTP、NNTP和SMTP等全部四项服务。
4. 有了IIS意味着能发布网页,并且有ASP(Active Server Pages)、JAVA、VBscript产生页面,有着一些扩展功能。IIS支持一些有趣的东西,象有编辑环境的界面(FRONTPAGE)、有全文检索功能的(INDEX SERVER)、有多媒体功能的(NET SHOW)
没有最低配置,以提供服务的资源或程序需要为准。
一、安装IIS
从桌面打开“我的电脑“,进入后打开“控制面板“,好,这时找到“添加/删除程序“,进行双击;在弹出的窗口中,单击“添加/删除Windows组件“,等待,会 。
弹出一个窗口,这里可以进行选择,看要安装什么组件。
也就是在这一个名称前面的四角框打上勾;(当然,也可以对“Internet信息服务(IIS)“这一条进行双击,这时就会弹一个窗口,里面又可以进行选择,看哪些不需要安装都可以去掉勾。)
选好了以后,单击“下一步“,这时就会弹出一个进度条,安装过程中会提示插入跟当前所用的系统版本相对应的系统安装盘;例如:系统是XP,那就插入XP系统安装盘;
2000就插入2000系统安装盘。建议用2000server的的系统做服务器会比较稳定,而且人数访问限制可以自由设置。放入光盘后,单击确定。完成后,开始设置IIS。
二、设置IIS
也是打开“控制面板”--->然后打开“管理工具”--->这时找到刚安装的“Internet 服务管理器“,双击;看到的是“Internet信息服务“窗口, 。
这时对,左窗口的“Internet信息服务”文字下边的“电脑的计算机名旁的+号进行单击,弹出下一级目录,现在只要做网站服务器,其它功能不需要,都把它停止运行,
免得被人攻击,如:”默认FTP站点“,现在不需要,对该项进行右击选”停止“。看到的都照这个步骤弄”停止“服务,只留一个”默认web站点”为”启动“状态。
接下来开始设置站点吧。对“默认web站点”右击,选择”属性“,弹击一个名为”默认web站点属性”的窗口,要设的第一个“Web站点“: 。
详细设置列表:
Web 站点标识
说明: 默认Web站点
IP 地址: (全部未分配) 。
TCP 端口: 80 (填80) 。
连接
无限 (不限制访问人数,就单击前边的圆圈) 。
限制到 (要限制访问人数,就单击前边的圆圈和输入限制连接的人数) 。
连接超时:30(秒)
启用保持 HTTP 激活 (打上勾) 。
启用日记记录 (打上勾)
活动日记格式:
W3C 扩充日志文件格式
这一页设置就完成了;下一设置:
操作员:
这里就不用设了,用默认的.
性能:
这里也可以跳过,可以不用设置。也可以过看后自已看看需不需要设置。
ISAPI 筛选器
这里不管它
主目录
(这里要好好设一下了)
连接到此资源时,内容应该来自于:
此计算机上的目录
另一计算机上的共享位置
重定向URL
(这里选第一个)
本地路径: (这里是那网站肉容的文件夹)比如:网站放在E:\web,那就填“E:\web“
(打勾) 脚本资源访问 (打勾)日志访问 。
(打勾) 读取 (打勾)索引此资源 。
写入(不打勾,打了勾,别人就可以修改网站了) 。
目录浏览(不打勾,看情况定)
在运行中输入cmd ,然后用 netstat -an 看下有没有8888这个端口?至少可以看是不是被占用了。
是TCP协议吧,原因是服务器没有启动,或者启动了没有处于侦听状态。
是TCP协议,在实例化tcpclient = new TcpClient(remoteIpString, remotePort);的时候报错。
我想问一下,在同一个程序中怎么既充当服务器有充当客户端?
很有如果我用本机的ip做监听服务器地址,然后用127.0.0.1做客户机的ip地址可以嘛?
我想做的是P2P数据传送
这个8888应该是服务端的监听端口,如果netstat看不到的话肯定是会发生lz你所说的问题的。你应该还要启动这个服务端才对。
貌似不是在服务器端了,程序开始默认获取本机ip地址以及一个可用的端口,然后对这个端口进行监听。然后让你添加一个或多个好友ip地址及端口号。我是在添加好友的时候出现这个错误的。添加好友的ip我试过用127.0.0.1和本机ip,都报这个错。
网上那些“范例”很多都是所谓的单机demo,不要相信是产品的。回答你#4楼的问题。最起码的,通用服务器不是什么什么127.0.0.1进行bind操作的。比较正规的是IPAddress.Any,比较业余的也是从dns对象中遍历IPAddress集合,找出其中第一个符合ipv4模式的地址。你看到127.0.0.1的,直接把这个写“范例”的作者当作骗子好了。
大规模的测试,产品化的测试,这是必需的。不要相信仅仅是为了掩饰一个特别方法随便写的所谓范例。即使是msdn上的通讯范例,大多数也是非产品化的。因为它如果按照产品设计必须有的要素来设计,初学者反而会“看不懂”。这就是一个现实矛盾。
服务器应该害是启动了的,服务器的ip是本机ip,端口号时一个随机可用的值。这是我的理解。
我把监听的代码贴上来,在程序加载方法里调用。
ThreadStart myThreadStartDelegate = new ThreadStart(Listensing);。
//创建一个用于监听的线程对象,通过代理执行线程中的方法 myThread = new Thread(myThreadStartDelegate);。
//启动线程。
myThread.Start();。
一下是监听方法
private void Listensing()。
{
Socket socket = null;。
//获取本机上第一个可用的IP地址 myIPAddress = (IPAddress)Dns.GetHostAddresses(Dns.GetHostName()).GetValue(0);。
Random r = new Random();。
while (true) 。
{
try。
{。
//随机产生一个0~65535之间的端口号。
myPort = r.Next(65535);。
//myPort = 8888;。
//创建TcpListener对象,在本机的IP和Port端口监听连接到该IP和端口的请求。
tcpListener = new TcpListener(myIPAddress, myPort);。
//开始监听,如果不出现异常,则说明IP地址和端口号可用。
tcpListener.Start();。
//显示IP地址和端口。
ShowLocalIPAndPort();。
//在信息窗口显示成功信息。
ShowMyMessage(string.Format("尝试用端口{0}监听成功", myPort));。
ShowMyMessage(string.Format("<message>[{0}]{1:h点m分s秒}开始在端口{2}监听与本机的连接", myIPAddress, DateTime.Now, myPort));。
break;。
}。
catch 。
{。
//继续while循环,以便随机找下一个可用端口号,同时显示失败信息。
ShowMyMessage(string.Format("尝试用端口{0}监听失败", myPort));。
}。
}
while (true) 。
{
try。
{。
//使用阻塞方式接受客户端连接,根据连接信息创建Tcpclient对象。
//注意:AcceptSocket接受到新的连接请求才会继续执行其后的语句。
socket = tcpListener.AcceptSocket();。
//如果往下执行,说明已经根据客户端连接请求创建了套接字。
//使用创建的套接字接受客户端发送的信息。
NetworkStream stream = new NetworkStream(socket);。
StreamReader sr = new StreamReader(stream);。
string recieveMessage = sr.ReadLine();。
int i1 = recieveMessage.IndexOf(",");。
int i2 = recieveMessage.IndexOf(",", i1 + 1);。
int i3 = recieveMessage.IndexOf(",", i2 + 1);。
string ipString = recieveMessage.Substring(0, i1);。
string portString = recieveMessage.Substring(i1 + 1, i2 - i1 - 1);。
string messageTypeString = recieveMessage.Substring(i2 + 1, i3 - i2 - 1);。
string messageString = recieveMessage.Substring(i3 + 1);。
ShowMyMessage(ipString, portString, messageTypeString, messageString);。
}。
catch 。
{。
//通过停止TcpListener使AcceptSocket方法出现异常。
//在异常处理中关闭套接字并终止线程。
if (socket != null) 。
{。
if (socket.Connected) 。
{。
socket.Shutdown(SocketShutdown.Receive);。
}。
socket.Close();。
}。
myThread.Abort();。
}。
}
}
http://topic.csdn.net/u/20100506/18/19b27fcf-af70-4016-a30c-10de342c3214.html。
System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException: 由于目标计算机积极拒绝,无法连接。 127.0.0.1:80。
在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)。
在 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)。
在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)。
--- 内部异常堆栈跟踪的结尾 ---。
在 System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)。
在 System.Net.HttpWebRequest.GetRequestStream()。
在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)。
以一种访问权限不允许的方式做了一个访问套接字的尝试。
一般就是因为端口被占用
IPAddress Addr=IPAddress.Parse(this.hostname); 。
TcpListener server = new TcpListener(Addr,port); 。
server.Start(); 。
----------- 。
如果你已在此地址上做了发送数据的socket或tcpclient或udp,那么这个监听和发送在同一个端口上就会发生错误的。
using System;
using System.IO; 。
using System.Net; 。
using System.Net.Sockets; 。
using System.Text; 。
class MyTcpListener 。
{
public static void Main() 。
{
TcpListener server=null; 。
try
{
// Set the TcpListener on port 13000. 。
Int32 port = 13000; 。
IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 。
// TcpListener server = new TcpListener(port); 。
server = new TcpListener(localAddr, port); 。
// Start listening for client requests. 。
server.Start(); 。
// Buffer for reading data 。
Byte[] bytes = new Byte[256]; 。
String data = null; 。
// Enter the listening loop. 。
while(true)
{
Console.Write("Waiting for a connection... "); 。
// Perform a blocking call to accept requests. 。
// You could also user server.AcceptSocket() here. 。
TcpClient client = server.AcceptTcpClient(); 。
Console.WriteLine("Connected!"); 。
data = null;
// Get a stream object for reading and writing 。
NetworkStream stream = client.GetStream(); 。
int i;
// Loop to receive all the data sent by the client. 。
while((i = stream.Read(bytes, 0, bytes.Length))!=0) 。
{
// Translate data bytes to a ASCII string. 。
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); 。
Console.WriteLine("Received: {0}", data); 。
// Process the data sent by the client. 。
data = data.ToUpper(); 。
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); 。
// Send back a response. 。
stream.Write(msg, 0, msg.Length); 。
Console.WriteLine("Sent: {0}", data); 。
}
// Shutdown and end connection 。
client.Close(); 。
}
}
catch(SocketException e) 。
{
Console.WriteLine("SocketException: {0}", e); 。
}
finally
{
// Stop listening for new clients. 。
server.Stop(); 。
}
Console.WriteLine("\nHit enter to continue..."); 。
Console.Read(); 。
}
是因为垃圾回收机制
****************************************。
如果你在服务器端一直保持访问这个连接。那就应该是客户端的问题,客户端是否也一直保持访问?
****************************************。
lz叙述不太一致,到底是在局域网正常,还是仅仅在本机正常??
如果在局域网正常,主要考虑路由器等网络设备的问题。远程主机如果不是运行你的C#程序,要考虑的东西就更多了。比如你用80端口访问百度,它当然会响应后立即断开连接。
*******************************************。
“远程”的概念,对于你的程序来说,包括局域网和你所谓的远程,没有任何区别,都不是“本地”。
所以,只是网络设备的问题。比如路由器配置。如果你不能控制,就需要不停地进行握手。
//连接你要扫描的ip以及端口,连接成功就代表端口开放。
client = new TcpClient();。
client.Connect(currentIP, intPort);。
//如果没出异常就代表连接成功,会在文本框中打印出来,反之异常就代表连接不成功。
我加上了connect(),输入了一个IP段,扫描结果还是全部连接成功!