導航:首頁 > 編程語言 > socket編程實戰

socket編程實戰

發布時間:2025-07-17 16:12:52

java編程中,Socket通信是怎麼實現的

java編程對於Socket之間的通信過程如下:

服務端往Socket的輸出流裡面寫東西,客戶端就可以通過Socket的輸入流讀取對應的內容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應的Socket輸出流裡面寫東西,然後服務端對應的Socket的輸入流就可以讀出對應的內容。下面來看一些服務端與客戶端通信的例子:

publicclassServer{

publicstaticvoidmain(Stringargs[])throwsIOException{
//為了簡單起見,所有的異常信息都往外拋
intport=8899;
//定義一個ServerSocket監聽在埠8899上
ServerSocketserver=newServerSocket(port);
//server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客戶端建立好連接之後,我們就可以獲取socket的InputStream,並從中讀取客戶端發過來的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}

}
客戶端代碼
Java代碼publicclassClient{

publicstaticvoidmain(Stringargs[])throwsException{
//為了簡單起見,所有的異常都直接往外拋
Stringhost="127.0.0.1";//要連接的服務端IP地址
intport=8899;//要連接的服務端對應的監聽埠
//與服務端建立連接
Socketclient=newSocket(host,port);
//建立連接後就可以往服務端寫數據了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//寫完後要記得flush
writer.close();
client.close();
}

}

❷ 鏈夎皝鑳界粰鎴戞濊礬鍚楋紵 鍏充簬綆鍗曠殑socket緙栫▼銆

棣栧厛錛屼綘寰楀啓涓鏈嶅姟鍣錛涚敤涓や釜瀹㈡埛絝榪炴帴涓婃湇鍔″櫒錛屽㈡埛絝閫氳繃鏈嶅姟鍣ㄨ繘琛屾暟鎹浜ゆ祦銆

鍩轟簬TCP錛堥潰鍚戣繛鎺ワ級鐨凷ocket緙栫▼
鏈嶅姟鍣ㄧ欏哄簭錛
1. 鍔犺澆濂楁帴瀛楀簱
2. 鍒涘緩濂楁帴瀛楋紙socket錛
3. 灝嗗楁帴瀛楃粦瀹氬埌涓涓鏈鍦板湴鍧鍜岀鍙d笂錛坆ind錛
4. 灝嗗楁帴瀛楄句負鐩戝惉妯″紡錛屽噯澶囨帴鏀跺㈡埛璇鋒眰錛坙isten錛
5. 絳夊緟瀹㈡埛璇鋒眰鐨勫埌鏉ワ紱褰撹鋒眰甯︽潵鍚庯紝鎺ュ彈榪炴帴璇鋒眰錛岃繑鍥炰竴涓鏂扮殑瀵瑰簲浜庢ゆ¤繛鎺ョ殑濂楁帴瀛楋紙accept錛
6. 鐢ㄨ繑鍥炵殑濂楁帴瀛楀拰瀹㈡埛絝榪涜岄氫俊錛坰end/recv錛
7. 榪斿洖錛岀瓑寰呭彟涓涓瀹㈡埛璇鋒眰
8. 鍏抽棴濂楁帴瀛(closesocket)
瀹㈡埛絝紼嬪簭錛
1. 鍔犺澆濂楁帴瀛楀簱
2. 鍒涘緩濂楁帴瀛(socket)
3. 鍚戞湇鍔″櫒鍙戦佽繛鎺ヨ鋒眰錛坈onnect錛
4. 鍜屾湇鍔″櫒絝榪涜岄氫俊(send/receive)
5. 鍏抽棴濂楁帴瀛(closesocket)

鍩轟簬UDP錛堥潰鍚戞棤榪炴帴錛夌殑socket緙栫▼
鏈嶅姟鍣ㄧ錛堟帴鏀剁錛夌▼搴忥細
1. 鍔犺澆濂楁帴瀛楀簱
2. 鍒涘緩濂楁帴瀛楋紙socket錛
3. 灝嗗楁帴瀛楃粦瀹氬埌涓涓鏈鍦板湴鍧鍜岀鍙d笂錛坆ind錛
4. 絳夊緟鎺ユ敹鏁版嵁錛坮ecvfrom錛
5. 鍏抽棴濂楁帴瀛(closesocket)
瀹㈡埛絝錛堝彂閫佺錛夌▼搴
1. 鍔犺澆濂楁帴瀛楀簱
2. 鍒涘緩濂楁帴瀛楋紙socket錛
3. 鍚戞湇鍔″櫒鍙戦佹暟鎹錛坰endto錛
4. 鍏抽棴濂楁帴瀛(closesocket)

❸ 關於vb.net中socket編程實例:伺服器端的一些問題

Socket類連接後 可以通過類中的 RemoteEndPoint 來獲取遠程IP和埠信息.
要注意的是.需要將它強制轉化為 IPEndPoint類型 然後通過 IPEndPoint.Address以及IPEndPoint.Port來獲取對應的IP及埠

例:
Dim REV_SCK As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
'這里創建一個UDP Socket連接的實例 TCP也是一樣的

'省略SOCKET連接的代碼 當SOCKET連接成功後 可以用下面的語句獲取遠程信息
Dim IP as string ,Port as integer
'定義IP和Port變數 用來保存地址及埠
IP = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Address.ToString())
Port = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Port)

linux C語言編程,socket實現的即使通訊系統

Socket通信創建步驟:

(1)通過socket()函數創建socket
(2)通過bind函數綁定socket於設備地址
(3)進行讀寫操作read/recv/recvfrom write/send/sendto
(4)close方法關閉套接字


例子如下:

test1.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>

intmain(void)
{
//createsocket
intfd=socket(AF_INET,SOCK_DGRAM,0);
if(fd==-1)
{
perror("socket ");
exit(-1);
}
printf("socketfd=%d ",fd);

//buildconnectionaddress
structsockaddr_inaddr;
addr.sin_family=AF_INET;
addr.sin_port=htons(6666);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");

intr;
r=bind(fd,(structsockaddr*)&addr,sizeof(addr));
if(r==-1)
{
perror("bind");
close(fd);
exit(-1);
}
printf("bindaddresssuccessful! ");
//acceptorsendmessage
charbuf[255];
structsockaddr_infrom;
socklen_tlen;
len=sizeof(from);
塵梁空while(1)
{
r=recvfrom(fd,buf,sizeof(buf)-1,0,(structsockaddr*)&from,&len);
if(r>0)
{
buf[r]=0;
printf("Themessagefrom%sis:%s ",inet_ntoa(from.sin_addr),buf);
}
else
{
break;
}
}
//closesocket
close(fd);
return0;
}

test2.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

intmain(void)
{
//createsocket
intfd=socket(AF_INET,SOCK_DGRAM,0);
if(fd==-1)
{
perror("socket");
exit(-1);
}
printf("createsocketOK! ");
//createansendaddress
structsockaddr_inaddr={};
addr.sin_family=AF_INET;
addr.sin_port=htons(6666);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
//
intr;
派瞎charbuf[255];
while(1)
{
r=read(0,buf,sizeof(buf)-1);
if(r<=0)
break;
sendto(fd,buf,r,0,(structsockaddr*)&addr,sizeof(addr));
}
//closesocket
渣凳close(fd);
return0;
}

先運行test1.c,然後運行test2.c,在test2.c運行後輸入內容,在test1.c所在終端中就會顯示信息

運行結果如下:

閱讀全文

與socket編程實戰相關的資料

熱點內容
伺服器第一層是什麼意思 瀏覽:196
linux切換超級用戶 瀏覽:860
命令鈴鐺 瀏覽:302
視頻加密防盜選哪家 瀏覽:674
程序員面試編程題 瀏覽:169
加密貨幣是散戶還是機構 瀏覽:783
網站圖片怎麼壓縮 瀏覽:135
小米一直構建加密通道 瀏覽:379
java代理的作用 瀏覽:255
qt怎麼聯合編譯dll 瀏覽:896
解壓香皂切割視頻大全 瀏覽:975
pdf越南 瀏覽:282
蘋果app商店搜索不到微信怎麼辦 瀏覽:987
程序通過編譯是什麼意思 瀏覽:27
學會時間管理對緩解壓力重要嗎 瀏覽:510
android業務邏輯層 瀏覽:827
sdk打開文件夾 瀏覽:259
伊朗北面命令世界大耳朵圖圖 瀏覽:562
javastring比較大小 瀏覽:562
機房伺服器和雲伺服器對比 瀏覽:956