伺服器軟體為什麼可以監聽埠
『壹』 服務端必須偵聽在一 個眾所周知的埠上,這個埠怎麼選擇,又是如何讓客戶端
所謂的眾所周知的埠就是由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();
}}
}
}
}
『玖』 如何讓伺服器監聽兩個埠
最合理的方式是建立多個線程,每個線程監聽一個埠。
當然一段代碼輪詢監聽也不是不可以,但在效率上要低不少