當前位置:首頁 » 城管服務 » socket服務端

socket服務端

發布時間: 2021-01-10 18:37:32

『壹』 socket 客戶端和服務器端怎麼測試的

熟悉socket API熟悉建議先看看socket編程文檔鏈接址:(v=VS.85).aspx

般服務端sokcet API調用順序:
bind() // 設置服務埠
listen() // 等待版客戶權端連接
accept() // 與客戶端建立連接

請參考:(v=VS.85).aspx
accept函數原型:
SOCKET accept(
__in SOCKET s,
__out struct sockaddr *addr,
__inout int *addrlen
);

第二參數 addr包含客戶端IP址埠認客戶端IP埠要注意IP定完全等價於客戶端本機埠比:客戶端區域網IP址192.168.1.100通ADSL路由連接internet再通internet連接服務端候服務端獲客戶端IP址能ADSL路由IP

『貳』 SOCKET編程實現伺服器端的步驟是什麼

Java版本
1.編寫伺服器端,實例化ServerSocket對象,這里要定義ip和埠,實例化Socket,從ServerSocket對象中accept() 獲取內,這里要涉及到容流,輸入輸出流在Socket中獲取
2.編寫客戶端,實例化Socket對象,ip,埠,流,在Socket中獲取
如果想要具體代碼,就留言,有空發給你

『叄』 TCP/IP 使用Socket 實現客戶端與伺服器端通信

對於伺服器,你先創建一個套接字(socket),然後bind綁定一個套接地址,然後你在用listen,此時你的伺服器會一直阻塞在這,處於監聽狀態,檢查是否有客戶端來connect,一旦有的話,你的伺服器就會accept。
所以,是你的伺服器是處於監聽狀態,監聽是否有客戶端,然後由客戶端來連接伺服器,伺服器接受客戶端的連接,而不是伺服器去連接客戶端。

『肆』 如何建立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實例傳遞進去就好。到這里,我們的服務端代碼差不多也就編寫完成了。怎麼樣?很簡單吧。

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

伺服器端代碼:

importjava.io.IOException;
importjava.io.InputStream;
importjava.net.ServerSocket;
importjava.net.Socket;

publicclassServer{

publicvoidserver(){
try{
ServerSocketserverSocket=newServerSocket(8888);//建立伺服器端的套接字,並監聽8888埠

Socketsocket=serverSocket.accept();//如果有請求到達,則接受請求,並建立一個新的套接字
InputStreamis=socket.getInputStream();//獲取此套接字上的輸入流,用於接收消息

//接下來就是獲取套接字里的位元組流,並轉化為字元串
byte[]bytes=newbyte[1024];
intcount;
StringBuildersb=newStringBuilder();
while((count=is.read(bytes))!=-1){
sb.append(newString(bytes,0,count));
}

is.close();
System.out.println(sb.toString());

}catch(IOExceptione){
e.printStackTrace();
}

}

publicstaticvoidmain(String[]args){
Servers=newServer();
s.server();
}

}

另附客戶端:

importjava.io.IOException;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;

publicclassClient{
publicvoidclient(){
try{
Socketsocket=newSocket();//建立套接字
socket.connect(newInetSocketAddress("127.0.0.1",8888));//連接到指定IP地址的主機,並指定埠號接收消息

OutputStreamos=socket.getOutputStream();//獲取此連接上的輸出流,用於發送數據
os.write(newString("Hello,world!").getBytes());//將字元串轉化為位元組數組寫入輸出流
os.flush();//刷新此輸出流,將位元組流寫入它們預期的目標
os.close();//關閉連接,否則會報連接重置異常
}catch(IOExceptione){
e.printStackTrace();
}
}

publicstaticvoidmain(String[]args){
Clientc=newClient();
c.client();
}
}

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

ClientSocket組件為客戶端組件。它是通信的請求方,也就是說,它是主動地與伺服器端建立連接。
ServerSocket組件為伺服器端組件。它是通信的響應方,也就是說,它的動作是監聽以及被動接受客戶端的連接請求,並對請求進行回復。
ServerSocket組件可以同時接受一個或多個ClientSocket組件的連接請求,並與每個ClientSocket組件建立單獨的連接,進行單獨的通信。因此,一個伺服器端可以為多個客戶端服務。
設計思路
本例包括一個伺服器端程序和一個客戶端程序。客戶端程序可以放到多個計算機上運行,同時與伺服器端進行連接通信。
本例的重點,一是演示客戶端與伺服器端如何通信;二是當有多個客戶端同時連接到伺服器端時,伺服器端如何識別每個客戶端,並對請求給出相應的回復。為了保證一個客戶端斷開連接時不影響其它客戶端與伺服器端的通信,同時保證伺服器端能夠正確回復客戶端的請求,在本例中聲明了一個記錄類型:
type
client_record=record
CHandle: integer; //客戶端套接字句柄
CSocket:TCustomWinSocket; //客戶端套接字
CName:string; //客戶端計算機名稱
CAddress:string; //客戶端計算機IP地址
CUsed: boolean; //客戶端聯機標志
end;
利用這個記錄類型數據保存客戶端的信息,同時保存當前客戶端的連接狀態。其中,CHandle保存客戶端套接字句柄,以便准確定位每個與伺服器端保持連接的客戶端;Csocket保存客戶端套接字,通過它可以對客戶端進行回復。Cused記錄當前客戶端是否與伺服器端保持連接。
下面對組件ServerSocket和ClientSocket的屬性設置簡單說明。
ServerSocket的屬性:
· Port,是通信的埠,必須設置。在本例中設置為1025;
· ServerTypt,伺服器端讀寫信息類型,設置為stNonBlocking表示非同步讀寫信息,本例中採用這種方式。
· ThreadCacheSize,客戶端的最大連接數,就是伺服器端最多允許多少客戶端同時連接。本例採用默認值10。
其它屬性採用默認設置即可。
ClientSocket的屬性:
· Port,是通信的埠,必須與伺服器端的設置相同。在本例中設置為1025;
· ClientType,客戶端讀寫信息類型,應該與伺服器端的設置相同,為stNonBlocking表示非同步讀寫信息。
· Host,客戶端要連接的伺服器的IP地址。必須設置,當然也可以在代碼中動態設置。
其它屬性採用默認設置即可。

『柒』 寫好的socket服務端,怎樣讓別人連進來

傳遞數據肯定是byte數組,這個不用懷疑,然後自己定協議,比如說錢8個byte是gavemexy轉化成的內,然後接下來4個byte是一容個int型轉化的,用來記錄你後面那個坐標字元串的長度,再然後接你的坐標字元串。什麼字元串呢?android推薦用JSON格式的字元串,比較好解析,我們目前用的就是這個。PC端將一對xy的坐標存在一個jsonobject中,然後所有的jsonobject存在一個jsonarray中,然後調用jsonarray的tostring方法就得到字元串了,附加在剛才說的那個int長度後面。

android端接受後先把byte數組截斷,比較一下是否符合要求:前8個是gavemexy,接下來4個是int長度,再然後剩下的那些的長度正好是int表示的長度,這就符合要求了,然後將byte轉化為字元串,在用new jsonarray(string str) 來轉化為json數組,提取數組中的每一個jsonobject,再用jsonobject的getint或者getdouble神馬的提取xy坐標

『捌』 求tcp socket 客戶端的伺服器端的區別

服務在連接前監聽,客戶端主動發起連接,就著點區別。連接上後,兩者對等

『玖』 socket 服務端是什麼意思

網路上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱專為一個socket。

建立網路屬通信連接至少要一對埠號(socket)。socket本質是編程介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網路開發所用的介面,這就是Socket編程介面;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網路通信的能力。

Socket的英文原義是「孔」或「插座」。作為BSD UNIX的進程通信機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和埠,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一台主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。

『拾』 socket編程怎麼寫一個客戶端和兩個服務端

網路的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。
下面用Socket實現一個windows下的c語言socket通信例子,這里我們客戶端傳遞一個字元串,伺服器端進行接收。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
【伺服器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret, nLeft, length;
SOCKET sListen, sServer; //偵聽套接字,連接套接字
struct sockaddr_in saServer, saClient; //地址信息
char *ptr;//用於遍歷信息的指針
//WinSock初始化
wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
ret=WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//創建Socket,使用TCP協議
sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sListen == INVALID_SOCKET)
{
WSACleanup();
printf("socket() faild!\n");
return;
}
//構建本地地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路位元組序
saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址

//綁定
ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("bind() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}

//偵聽連接請求
ret = listen(sListen, 5);
if (ret == SOCKET_ERROR)
{
printf("listen() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
return;
}

printf("Waiting for client connecting!\n");
printf("Tips: Ctrl+c to quit!\n");
//阻塞等待接受客戶端連接
while(1)//循環監聽客戶端,永遠不停止,所以,在本項目中,我們沒有心跳包。
{
length = sizeof(saClient);
sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
if (sServer == INVALID_SOCKET)
{
printf("accept() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}
char receiveMessage[5000];
nLeft = sizeof(receiveMessage);
ptr = (char *)&receiveMessage;
while(nLeft>0)
{
//接收數據
ret = recv(sServer, ptr, 5000, 0);
if (ret == SOCKET_ERROR)
{
printf("recv() failed!\n");
return;
}
if (ret == 0) //客戶端已經關閉連接
{
printf("Client has closed the connection\n");
break;
}
nLeft -= ret;
ptr += ret;
}
printf("receive message:%s\n", receiveMessage);//列印我們接收到的消息。

}
// closesocket(sListen);
// closesocket(sServer);
// WSACleanup();
}
【客戶端】
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret;
SOCKET sClient; //連接套接字
struct sockaddr_in saServer; //地址信息
char *ptr;
BOOL fSuccess = TRUE;
//WinSock初始化
wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
ret = WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//確認WinSock DLL支持版本2.2
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
printf("Invalid WinSock version!\n");
return;
}
//創建Socket,使用TCP協議
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
WSACleanup();
printf("socket() failed!\n");
return;
}
//構建伺服器地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路節序
saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");
//連接伺服器
ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("connect() failed!\n");
closesocket(sClient); //關閉套接字
WSACleanup();
return;
}

char sendMessage[]="hello this is client message!";
ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");
closesocket(sClient); //關閉套接字
WSACleanup();
}

熱點內容
影視轉載限制分鍾 發布:2024-08-19 09:13:14 瀏覽:319
韓國電影傷口上紋身找心裡輔導 發布:2024-08-19 09:07:27 瀏覽:156
韓國電影集合3小時 發布:2024-08-19 08:36:11 瀏覽:783
有母乳場景的電影 發布:2024-08-19 08:32:55 瀏覽:451
我准備再看一場電影英語 發布:2024-08-19 08:14:08 瀏覽:996
奧迪a8電影叫什麼三個女救人 發布:2024-08-19 07:56:14 瀏覽:513
邱淑芬風月片全部 發布:2024-08-19 07:53:22 瀏覽:341
善良媽媽的朋友李采潭 發布:2024-08-19 07:33:09 瀏覽:760
哪裡還可以看查理九世 發布:2024-08-19 07:29:07 瀏覽:143
看電影需要多少幀數 發布:2024-08-19 07:23:14 瀏覽:121