服务器软件为什么可以监听端口
‘壹’ 服务端必须侦听在一 个众所周知的端口上,这个端口怎么选择,又是如何让客户端
所谓的众所周知的端口就是由TCP/UDP这些协议规定的一些约定俗成的端口号,也叫知名端口(Well-Known Ports)
(1)知名端口(Well-Known Ports)
知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如 21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。
(2)动态端口(Dynamic Ports)
动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
也就是说如果是你自己服务,一般建议选择1024以上的端口(注意,有一些常见的软件的端口也建议避开,比如mysql的3306、sqlserver的1433、oracle的1521),但这不是强制的规定,比如说你的服务器上用不到80,而决定把自己的服务开放在80端口上,这也是完全没问题的。
‘贰’ 服务器是如何监听端口发过来的数据
在收到消息的函数里面,会有一个参数,如果是用Windows API做的话,就有一个sockaddr_in的结构体,里面包含了对方的IP和端口,记得端口是高低字节错位的,把高8位和低8位调换一下就好了。
有了对方的IP和端口,直接再向这个IP和端口发消息就好了。
‘叁’ 服务器必备工具软件的端口监控
TcpView - TcpViews是一款免费的端口和线程监控工具,可以列出当前所有TCP和UDP端口的进程清单,包括本地和远程地址的TCP连接,其实和系统命令netstat类似,不过是GUI界面的,使用方便,占用资源少,默认字体在中文环境下很小,需要手动修改。在服务器上运行的话,默认刷新时间不要用默认的1秒。
‘肆’ 服务器的侦听端口是什么意思
服务都是有特定端口号的,在服务器上,启动一个服务后,这个服务就不断检测他的服务端口号,即所谓的侦听端口,一旦检测收到发往其端口号的服务报文,就会进行处理
‘伍’ 服务器监听端口号起什么作用
服务器端口号 ,是服务器监听客户端用的 ,相当于"地址" ,是服务器与客户端间的纽带 .
举个例子:你登陆QQ ,你把你的用户名和密码输入后,点击"登陆" ,此时,客户端就会把你的密码和用户名发送到该端口的端口号.然后服务器经过到数据库验证,如果正确,就会把正确的信息发给你的客户端(就是你 的电脑) .
端口有好多,电脑中有9000多个已经规定好的端口,还有好多自己定义的端口,8000 ,10000
不懂的还可以找我
[email protected]
‘陆’ 怎么让linux服务器监听某一个端口
如果是web服务器,比如apache,或者tomcat,nginx这种,有相应的配置文件的,比如xxx.conf,这个配置文件中可以设定监听的端口。
‘柒’ 我在windows服务器监听9090端口 然后客户端怎么连接》
Windows 2000/XP/2003系统中的远程终端服务是一项功能非常强大的服务,同时也成了入侵者长驻主机的通道,入侵者可以利用一些手段得到管理员账号和密码并入侵主机。下面,我们来看看如何通过修改默认端口,防范黑客入侵。
众所周知,远程终端服务基于端口3389。入侵者一般先扫描主机开放端口,一旦发现其开放了3389端口,就会进行下一步的入侵,所以我们只需要修改该务默认端口就可以避开大多数入侵者的耳目。
步骤:打开“开始→运行”,输入“regedit”,打开注册表,进入以下路径:[HKEY_LOCAL_MACHINE/SYSTEM/
CurrentControlSet/Control/Terminal Server/
Wds/rdpwd/Tds/tcp],看见PortNamber值了吗?双击打开后选择十进制-->数值数据:其默认值是3389,修改成所希望的端口即可,例如9090。
再打开[HKEY_LOCAL_MACHINE/
SYSTEM/CurrentContro1Set/Control/Tenninal Server/WinStations/RDP/Tcp],将PortNumber的值(默认是3389)修改成端口9090。
设置完成修改后,要想生效还要重新启动服务器,注:在重启服务器前,请务必确定系统防火墙已经把9090端口进去了,以免系统开了防火墙。重启服务器后。服务器远程不了了。重启以后远程登录的时候使用端口9090就可以了。如在远程桌面输入图
‘捌’ 易语言服务器如何监听客户端口
可以考虑用java实现监听客户端口,参考例子如下:
packagetest;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.lang.reflect.Method;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.SocketException;
importjava.util.HashMap;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Random;
/**
*该程序用的DatagramSocket,实现UDP的通讯
*@authorD'Addario
*
*/
publicclassTest{
privateintheadLen=12;//消息起点和终点的记录例如classAclassB就是发往classA的消息,发送者是classB
privateRandomrandom;
privateStringserverIp;
privateintserverPort;
privateHashMap<String,Classes>map;
{
serverIp="127.0.0.1";
serverPort=9999;
random=newRandom(System.currentTimeMillis());
map=newHashMap<String,Classes>();
ClassesA=Test.this.newClasses();
A.ip="127.0.0.1";
A.name="我是A";
A.port=10000;
map.put("classA",A);
ClassesB=Test.this.newClasses();
B.ip="127.0.0.1";
B.name="我是B";
B.port=10001;
map.put("classB",B);
}
publicstaticvoidmain(String[]a)throwsException{
Testtest=newTest();
newThread(test.newServer()).start();
Clientclient1=test.newClient();
client1.mine="classA";
client1.remote="classB";
newThread(client1).start();
Clientclient2=test.newClient();
client2.mine="classB";
client2.remote="classA";
newThread(client2).start();
}
/**
*成员用于记录每个成员的个性信息
*@authorD'Addario
*
*/
privateclassClasses{
privateStringname;//成员姓名
privateStringip;//成员ip
privateintport;//成员的clientserver监听端口
}
/**
*server用于转发两个client之间消息的类
*@authorD'Addario
*
*/
{
publicvoidrun(){
//TODOAuto-generatedmethodstub
booleanstart=false;
DatagramSocketsocket=null;
try{
socket=newDatagramSocket(serverPort);
start=true;
}catch(SocketExceptione1){
e1.printStackTrace();
}
while(start)
{
try{
byte[]data=newbyte[1024];
DatagramPacketpacket=newDatagramPacket(data,data.length);
socket.receive(packet);
intlen=packet.getLength();
//System.out.println("receviedata:"+newString(data,0,len));
if(len<headLen)
thrownewIOException("无效数据");
Stringid=newString(data,0,headLen/2);//获取发往对象的ID
Stringid2=newString(data,headLen/2,headLen/2);
System.out.println("receivefrom"+id2+",sendto"+id+",msg["+newString(data,headLen,len-headLen)+"]");
Classesone=map.get(id.trim());
DatagramPacketretPack=newDatagramPacket(data,0,len,InetAddress.getByName(one.ip),one.port);
socket.send(retPack);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
/**
*Client客户端类,用于客户端消息的发送
*@authorD'Addario
*
*/
{
privateStringmine;
privateStringremote;
publicvoidrun(){
//TODOAuto-generatedmethodstub
Stringmsg=remote+mine;
DatagramSocketsocket=null;
try{
socket=newDatagramSocket(map.get(mine).port);
ClientServersrv=newClientServer();
srv.setSocket(socket);
newThread(srv).start();
}catch(SocketExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
byte[]data;
while(true)
{
StringsendStr=msg+"给我"+random.nextInt(5000)+"分吧";
data=sendStr.getBytes();
try{
DatagramPacketretPack=newDatagramPacket(data,0,data.length,InetAddress.getByName(serverIp),serverPort);
socket.send(retPack);
Thread.sleep(random.nextInt(5)*1000);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
/**
*客户端server用于监听服务器的消息
*@authorD'Addario
*
*/
{
DatagramSocketsocket;
publicDatagramSocketgetSocket(){
returnsocket;
}
publicvoidsetSocket(DatagramSocketsocket){
this.socket=socket;
}
publicvoidrun(){
byte[]data=newbyte[1024];
DatagramPacketpacket=newDatagramPacket(data,data.length);
while(true){
try{
socket.receive(packet);
intlen=packet.getLength();
if(len<headLen)
thrownewIOException("无效数据");
System.out.println("Igetthemessage:"+Thread.currentThread().getId()+"-->["+newString(data,0,len)+"]");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}}
}
}
}
‘玖’ 如何让服务器监听两个端口
最合理的方式是建立多个线程,每个线程监听一个端口。
当然一段代码轮询监听也不是不可以,但在效率上要低不少