當前位置:首頁 » 雲伺服器 » socket伺服器搭建

socket伺服器搭建

發布時間: 2022-02-11 05:07:22

㈠ SocketTool怎麼用/如何建立Socket服務端/客戶端

以 TCP 舉例:
(1) 建立服務端時,請選擇左側樹形菜單中的 「TCP Server」,然後點擊上方的「創建」按鈕,會彈出一個窗口,輸入 TCP 「監聽埠」即可。
(2) 建立客戶端時,請選擇左側樹形菜單中的「TCP Client」,然後點擊上方的「創建」按鈕,在彈出的對話框中,輸入對方 IP,由於你在本地啟動的服務端,所以 IP 輸入 127.0.0.1 即可,然後在「對方埠」中輸入步驟 (1) 時設定的埠號,然後,點擊上方的「連接」按鈕,如此,客戶端與服務端的 TCP 連接便已建立。
(3) 在左側會 TCP Server 和 TCP Client 樹形下會多出一個已建立的連接,點擊它後,在右側可以給對端發送消息。

㈡ 編寫代碼,使用java ServerSocket創建伺服器端ServerSocket的過程。

packagesocket;

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
importjava.net.ServerSocket;
importjava.net.Socket;

publicclassSocketService{
//搭建伺服器端
publicstaticvoidmain(String[]args)throwsIOException{
SocketServicesocketService=newSocketService();
//1、a)創建一個伺服器端Socket,即SocketService
socketService.oneServer();
}
publicvoidoneServer(){
try{
ServerSocketserver=null;
try{
server=newServerSocket(5209);
//b)指定綁定的埠,並監聽此埠。
System.out.println("伺服器啟動成功");
//創建一個ServerSocket在埠5209監聽客戶請求
}catch(Exceptione){
System.out.println("沒有啟動監聽:"+e);
//出錯,列印出錯信息
}
Socketsocket=null;
try{
socket=server.accept();
//2、調用accept()方法開始監聽,等待客戶端的連接
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,並繼續執行
}catch(Exceptione){
System.out.println("Error."+e);
//出錯,列印出錯信息
}
//3、獲取輸入流,並讀取客戶端信息
Stringline;
BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
PrintWriterwriter=newPrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
//由系統標准輸入設備構造BufferedReader對象
System.out.println("Client:"+in.readLine());
//在標准輸出上列印從客戶端讀入的字元串
line=br.readLine();
//從標准輸入讀入一字元串
//4、獲取輸出流,響應客戶端的請求
while(!line.equals("end")){
//如果該字元串為"bye",則停止循環
writer.println(line);
//向客戶端輸出該字元串
writer.flush();
//刷新輸出流,使Client馬上收到該字元串
System.out.println("Server:"+line);
//在系統標准輸出上列印讀入的字元串
System.out.println("Client:"+in.readLine());
//從Client讀入一字元串,並列印到標准輸出上
line=br.readLine();
//從系統標准輸入讀入一字元串
}//繼續循環

//5、關閉資源
writer.close();//關閉Socket輸出流
in.close();//關閉Socket輸入流
socket.close();//關閉Socket
server.close();//關閉ServerSocket
}catch(Exceptione){//出錯,列印出錯信息
System.out.println("Error."+e);
}
}
}

㈢ 如何搭建 websocket伺服器

其實,在伺服器的選擇上很廣,基本上,主流語言都有WebSocket的伺服器端實現,而我們作為前端開發工程師,當然要選擇現在比較火熱的NodeJS作為我們的伺服器端環境了。
NodeJS本身並沒有原生的WebSocket支持,但是有第三方的實現(大家要是有興趣的話,完全可以參考WebSocket協議來做自己的實現),我們選擇了「ws」作為我們的伺服器端實現。
由於本文的重點是講解WebSocket,所以,對於NodeJS不做過多的介紹,不太熟悉的朋友可以去參考NodeJS入門指南(http://www.nodebeginner.org/index-zh-cn.html)。
安裝好NodeJS之後,我們需要安裝「ws」,也就是我們的WebSocket實現,安裝方法很簡單,在終端或者命令行中輸入:
npm install ws
,等待安裝完成就可以了。
接下來,我們需要啟動我們的WebSocket服務。首先,我們需要構建自己的HTTP伺服器,在NodeJS中構建一個簡單的HTTP伺服器很簡單,so easy。代碼如下:
var app = http.createServer(onRequest ).listen( 8888 );
onRequest()作為回調函數,它的作用是處理請求,然後做出響應,實際上就是根據接收的URL,在伺服器上查找相應的資源,最終返回給瀏覽器。
在構建了HTTP伺服器後,我們需要啟動WebSocket服務,代碼如下:
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer( { server : app } );
從代碼中可以看出,在初始化WebSocket服務時,把我們剛才構建好的HTTP實例傳遞進去就好。到這里,我們的服務端代碼差不多也就編寫完成了。怎麼樣?很簡單吧。
望採納!

㈣ 如何創建一個socket並進行通信

Socket是網路上運行的兩個程序間雙向通訊的一端,它既可以接受請求,也可以發送請求,利用它可以較為方便的編寫網路上的數據的傳遞。在java中,有專門的socket類來處理用戶的請求和響應。利用SOCKET類的方法,就可以實現兩台計算機之間的通訊。這里就介紹一下在JAVA中如何利用socket進行網路編程。 在Java中Socket可以理解為客戶端或者伺服器端的一個特殊的對象,這個對象有兩個關鍵的方法,一個是getInputStream方法,另一個是getOutputStream方法。getInputStream方法可以得到一個輸入流,客戶端的Socket對象上的getInputStream方法得到的輸入流其實就是從伺服器端發回的數據流。GetOutputStream方法得到一個輸出流,客戶端Socket對象上的getOutputStream方法返回的輸出流就是將要發送到伺服器端的數據流,(其實是一個緩沖區,暫時存儲將要發送過去的數據)。 程序可以對這些數據流根據需要進行進一步的封裝。本文的例子就對這些數據流進行了一定的封裝(關於封裝可以參考Java中流的實現部分)。 一、建立伺服器類 Java中有一個專門用來建立Socket伺服器的類,名叫ServerSocket,可以用伺服器需要使用的埠號作為參數來創建伺服器對象。ServerSocket server = new ServerS...
感覺這樣的提問沒有什麼意義
建議看看書,查查資料

python怎樣建立socket伺服器

下面的例子是多線程實現的socket伺服器:

import socketimport threadingclass ThreadedServer(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))

def listen(self):
self.sock.listen(5)
while True:
client, address = self.sock.accept()
client.settimeout(60)
threading.Thread(target = self.listenToClient,args = (client,address)).start()

def listenToClient(self, client, address):
size = 1024
while True:
try:
data = client.recv(size)
if data:
# Set the response to echo back the recieved data
response = data
client.send(response)
else:
raise error('Client disconnected')
except:
client.close()
return Falseif __name__ == "__main__":
while True:
port_num = input("Port? ")
try:
port_num = int(port_num)
break
except ValueError:
pass

ThreadedServer('',port_num).listen()

㈥ Socket編程如何搭建一個外網可以訪問的伺服器

步驟:
1,和代理建立tcp聯接。
2,向代理發送版本的請求信息:
void CCommunicator::SendVer()
{
int datasize = 6;
char tempbuf[6];
tempbuf[0]=5;
tempbuf[1]=4;//標示後面所根的字接數
tempbuf[2]=0;
tempbuf[3]=1;
tempbuf[4]=2;
tempbuf[5]=3;
int senddatalen;
senddatalen=send(m_sock,(char*)tempbuf,6,0);
}
這一步如果失敗,斷開建立的tcp聯接,如果成功,如果需要用戶驗證則進行步驟3,否則進行4.
3,如果需要用戶驗證,則類似:
BOOL CCommunicator::SendUserTest()
{
int usernamelen=0;
int userpasslen=0;
usernamelen=m_strTestUserName.GetLength();
userpasslen=m_strTestUserPass.GetLength();
char tempbuf[100];
tempbuf[0]=5;
tempbuf[1]=usernamelen;//標示後面所根的字接數
strcpy(&tempbuf[2],m_strTestUserName);
tempbuf[2+usernamelen]=userpasslen;
strcpy((char*)&tempbuf [3+usernamelen],m_strTestUserPass);
int senddatalen;
int len;
len=usernamelen+userpasslen+3;
senddatalen=send(m_sock,(char*)tempbuf,len,0);
} 如果失敗,斷開建立的tcp聯接, 如果用戶返回成功,步驟4.
4,發送請求的協議類似:
void CCommunicator::SendRequestUDP()
{
int const datasize=10;
BYTE tempbuf[datasize]; tempbuf[0]=5;
tempbuf[1]=3;//標示UDP連接
tempbuf[2]=0;
tempbuf[3]=1;
tempbuf[4]=0;
tempbuf[5]=0;
tempbuf[6]=0;
tempbuf[7]=0;
*((SHORT*)(&(tempbuf[8])))=m_uBindUDPPort; //UDP在客戶端綁定的埠,就是你本地機器的做udp數據傳送的埠調用
//socket函數後,再調用bind()來邦定一個埠。
char temp;
temp=tempbuf[8];
tempbuf[8]=tempbuf[9];
tempbuf[9]=temp;
int senddatalen=send(m_sock,(char*)tempbuf,datasize,0);
}
如果失敗,斷開建立的tcp聯接,如果返回成功,驗證完畢!步驟5
5,真正的數據傳送,用代理傳送的時候,數據包的前面加上10個位元組類似:
void CCommunicator::CopyDataHead(BYTE * ptempbuf)
{
struct in_addr addr;
addr.s_addr=inet_addr(「202.220.33.333」);//這個ip是伺服器端的ip
ptempbuf[0]=0;
ptempbuf[1]=0;
ptempbuf[2]=0;
ptempbuf[3]=1;
ptempbuf[4]=(char)addr.S_un.S_un_b.s_b1;
ptempbuf[5]=(char)addr.S_un.S_un_b.s_b2;
ptempbuf[6]=(char)addr.S_un.S_un_b.s_b3;
ptempbuf[7]=(char)addr.S_un.S_un_b.s_b4;
*((SHORT*)(&(ptempbuf[8])))=m_uServerUDPPort;//伺服器的埠,就是你最終要發到那個伺服器的埠,也就是你的qq伺服器。
char temp;
temp=ptempbuf[8];
ptempbuf[8]=ptempbuf[9];
ptempbuf[9]=temp;
}
真正發送的時候類似:
int CCommunicator::SendBufferUDP(LPBYTE lpBuf,int nLen)
{
BYTE tempbuf[1000];
int iHeadData=0;
struct sockaddr_in her;
her.sin_family=AF_INET;
her.sin_addr.s_addr=inet_addr(m_szProxyAddr);//代理伺服器
her.sin_port=htons(m_uSocksPort);//發送請求的時候返回的代理伺服器端的埠,記住,這是最重要的。
CopyDataHead(tempbuf);
iHeadData=10;
nLen=nLen+10;
int addr_len;
addr_len=sizeof(struct sockaddr);
CopyMemory((char*)&tempbuf[iHeadData],lpBuf,nLen);
int returndatalen=sendto(m_socket,(char *)tempbuf,nLen,0,(struct sockaddr *)&her,addr_len);

㈦ 我想問下如何在手機上建立一個伺服器,用Socket的方法如何實現。

TCP方式:
TCP協議客戶端實現:

//創建一個Socket對象,指定伺服器端的IP地址和埠號
Socketsocket=newSocket("192.168.1.104",4567);
//使用InputStream讀取硬碟上的文件,這里只是用文件當做信息源,可以讀取控制項用戶輸入信息
InputStreaminputStream=new
FileInputStream("f://file/words.txt");

//從Socket當中得到OutputStream

OutputStream outputStream=socket.getOutputStream();
bytebuffer[]=newbyte[4*1024];inttemp=0;

//將InputStream當中的數據取出,並寫入到OutputStream當中
while((temp=inputStream.read(buffer))!=-1)

5
{
outputStream.write(buffer,0,temp);}
outputStream.flush();}

TCP協議伺服器端實現:

//聲明一個ServerSocket對象
ServerSocketserverSocket=null;
try{

//創建一個ServerSocket對象,並讓這個Socket在4567埠監聽

serverSocket=newServerSocket(4567);

//調用ServerSocket的accept()方法,接受客戶端所發送的請求,
//如果客戶端沒有發送數據,那麼該線程就停滯不繼續

Socketsocket=serverSocket.accept();
//從Socket當中得到InputStream對象

InputStreaminputStream=socket.getInputStream();
bytebuffer[]=newbyte[1024*4];
inttemp=0;

//從InputStream當中讀取客戶端所發送的數據
while((temp=inputStream.read(buffer))!=-1)
{
System.out.println(newString(buffer,0,temp));}
}
catch(IOExceptione)
{

e.printStackTrace();}

serverSocket.close();
}

UDP方式
UDP的客戶端代碼實現如下:

public static void main(String[]args)
{
try{

//首先創建一個DatagramSocket對象

DatagramSocket socket=new DatagramSocket(4567);
//創建一個InetAddree

6

InetAddress serverAddress=InetAddress.getByName("192.168.1.104");

String str="hello";

//這是要傳輸的數據

byte data[]=str.getBytes();

//把傳輸內容分解成位元組

//創建一個DatagramPacket對象,並指定要講這個數據包發送到網
絡當中的哪個地址,以及埠號

DatagramPacket packet=new
DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送數據
socket.send(packet);}
catch(Exceptione)
{

e.printStackTrace();}
}

UDP的服務端代碼實現如下:

//創建一個DatagramSocket對象,並指定監聽的埠號

DatagramSocket socket=new DatagramSocket(4567);
bytedata[]=newbyte[1024];
//創建一個空的DatagramPacket對象

DatagramPacket packet=new DatagramPacket(data,data.length);
//使用receive方法接收客戶端所發送的數據,
//如果客戶端沒有發送數據,該進程就停滯在這里

socket.receive(packet);

Stringresult=newString(packet.getData(),packet.getOffset(),
packet.getLength());

System.out.println("result--->"+result);

㈧ 怎樣在tomcat里建立socket服務

網上轉來的 不過我們以前也這么做的
沒現成代碼。 你研究試試

你自己寫一個servlet,在init方法中進行監聽即可,在部署文件web.xml中,將這個servlet設置為load-on-startup即可。如:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.my.servlet.myServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet/*</url-pattern>
</servlet-mapping>
這樣,tomcat啟動時便載入這個servlet,其init方法會自動被調用

相當於server socket 寫在servlet里

具體可以網路"WEB伺服器啟動時載入一個ServerSocket服務"。

㈨ 如何在客戶端上建立一個Socket與伺服器端連接,包括連接的函數

【zhuokai】:Socket.RemoteAddress Socket.RemoteHost伺服器端可以給連接上的客戶端發送測試數據,一定時間內回收到客戶端反應的可認為在線.【zhuokai】:請參考: http://www.programfan.com/article/showarticle.asp?id=2289【ylsl917】:我用的API,不是用的控制項,我貼出代碼來,麻煩大家給我修改一下吧procere TForm1.OnWork1Accept(var message: TMessage);Var Client_Addr: TSockAddr; ClientLen: Integer; s:string;begin FillChar(Client_Addr,Sizeof(Client_Addr),0); ClientLen := Sizeof(Client_Addr); Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);{ 能不能在這里判斷出建立的這個 Comm_Socket 是哪台機器建立的,其IP是多少?} //讀取/關閉 事件 WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);end;【ylsl917】:解決了,只要 Client_Addr.sin_addr.S_addr 轉換成字元串IP就行了 function IPIntToStr(I:Integer):String; var sinaddr:in_addr; begin sinaddr.S_addr:=i; result:=String(inet_ntoa(sinaddr)); end;【ylsl917】:還有誰上來說說怎麼做到長連接!!!【wj19781215】:自己定義活動包探測客戶端是否在線,不要用windows的全局活動包檢測,至於長連接就是tcp哦。【ylsl917】:謝謝樓上的 還有一個問題啊 我用API實現socket 能不能讓程序既是伺服器端,又是客戶端 【zhuokai】: 我用API實現socket 能不能讓程序既是伺服器端,又是客戶端 意思是在同一個程序里客戶端連接伺服器?可以的,多個線程【wj19781215】:用getsockname和getpeername【abcdefgdeng】:在socketserver的onAccept事件中用Socket.RemoteAddress讀取【ylsl917】: 我用API實現socket 能不能讓程序既是伺服器端,又是客戶端 意思是在同一個程序里客戶端連接伺服器?可以的,多個線程

熱點內容
壓縮某個文件夾 發布:2024-11-15 09:03:11 瀏覽:891
網址能解壓嗎 發布:2024-11-15 08:54:09 瀏覽:933
python更改目錄 發布:2024-11-15 08:41:08 瀏覽:265
伺服器快閃記憶體可以裝在一般電腦上嗎 發布:2024-11-15 08:36:46 瀏覽:8
安卓手機怎麼查詢自己的路線軌跡 發布:2024-11-15 08:32:19 瀏覽:969
phpdatet 發布:2024-11-15 08:32:17 瀏覽:507
HDB3編解碼實驗 發布:2024-11-15 08:17:31 瀏覽:212
怪星球編程 發布:2024-11-15 08:15:55 瀏覽:844
慧編程價格 發布:2024-11-15 08:14:09 瀏覽:459
python多行注釋的快捷鍵 發布:2024-11-15 08:09:14 瀏覽:957