當前位置:生活全書館 >

綜合知識

> socket請求怎麼寫

socket請求怎麼寫

1.socket能接收所有客戶端的請求怎麼寫(socket.Accept()的問題)

//啟動一個執行緒監聽

socket請求怎麼寫

System.Threading.Thread thread = new Thread(new ThreadStart(BeginListen));

thread.Start();

public void BeginListen()

{

//迴圈監聽

while(true)

{

Socket sckClient = s.Accept();

}

}

2.socket怎麼樣實現

Socket就是套接字它是網路程式設計中最常用遇到概念和工具在TCP/IP網路中傳送和接收資料就會經常使用到Socket由於使用Socket能夠在網路上處理複雜資料所以在各種網路應用中涉及到資料傳送和接收般都會使用Socket可見要掌握網路程式設計精通Socket是非常重要由於Socket本身複雜性決定了掌握它是比較困難Visual C#是微軟公司推薦開發.Net平臺應用主要語言隨著.Net深入人心目前很多有遠見公司都把以前軟體Software轉向了.Net平臺掌握網路程式設計始終是學習種開發語言重點這點對於Visual C#也同樣如此Visual C#實現網路功能.

幫助網

3.如何編寫socket套接字

Socket套接字相當於網路通訊兩端的插座,只要對方的Socket和自己的Socket有通訊聯接,雙方就可以傳送和接收資料。其定義類似於檔案控制代碼的定義。

如果編寫的是服務程式,那麼先呼叫socket()建立一個套接字,呼叫bind()繫結IP地址和埠,然後啟動一個無窮迴圈,迴圈中呼叫accept()接受連線。對於每個接受的連線,可以啟動多執行緒方式進行處理,在執行緒中呼叫send()、recv()傳送和接收資料。

如果編寫的是客戶端程式,則先呼叫socket()建立一個套接字,然後呼叫connect()連線伺服器,之後就是呼叫send()、recv()傳送和接收資料了。

服務端程式編寫:

1、呼叫ServerSocket(int port)建立一個伺服器端套接字,並繫結到指定埠上。

2、呼叫accept(),監聽連線請求,接收連線,返回通訊套接字。

3、呼叫Socket類的getOutStream()和getInputStream獲取輸出和輸入流,開始網路資料的傳送和接收。

4、關閉通訊套接字.Socket.close()。

客戶端程式編寫:

1、呼叫Socket()建立一個流套接字,並連線到伺服器端。

2、呼叫Socket類的getOutputStream()和fetInputStream()獲取輸出流和輸入流,開始網路資料的傳送和接收。

3、關閉通訊套接字.Socket.close()。

4.怎樣用 socket 寫一段程式 要求:可以實現在一臺機器上操作,然後另

1、首先要有伺服器程式和客戶端程式的概念,客戶端程式連線到伺服器程式監聽的埠,請求資料通訊

2、自己擬定一些通訊協議

比如,一個命令包包括(包頭(2位元組或4位元組) 包內容(若干位元組))

用2位元組的包頭表示整個包的長度,保證包的完整性

比如包都得2位元組能表示的長度最大是65536位元組,假設包頭為short型別 值為 10

表示這個指令整個包長度是12位元組,為完整包

那麼第三個位元組可以作為主協議使用,第四個位元組可以作為子協議,後面8個位元組可以作為這個主協議和子協議帶入的引數

只是舉一個簡單的例子

5.如何編寫一個利用Socket通訊的程式

設計思路 本例包括一個伺服器端程式和一個客戶端程式。

客戶端程式可以放到多個計算機上執行,同時與伺服器端進行連線通訊。 本例的重點,一是演示客戶端與伺服器端如何通訊;二是當有多個客戶端同時連線到伺服器端時,伺服器端如何識別每個客戶端,並對請求給出相應的回覆。

為了保證一個客戶端斷開連線時不影響其它客戶端與伺服器端的通訊,同時保證伺服器端能夠正確回覆客戶端的請求,在本例中聲明瞭一個記錄型別: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地址。

必須設定,當然也可以在程式碼中動態設定。 其它屬性採用預設設定即可。

程式原始碼: · 伺服器端原始碼(uServerMain.pas):unit uServerMain;interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, ToolWin, ComCtrls, ExtCtrls, StdCtrls, Buttons; const CMax=10; //客戶端最大連線數 type client_record=record CHandle: integer; //客戶端套接字控制代碼 CSocket:TCustomWinSocket; //客戶端套接字 CName:string; //客戶端計算機名稱 CAddress:string; //客戶端計算機IP地址 CUsed: boolean; //客戶端聯機標誌 end; type TfrmServerMain = class(TForm) ServerSocket: TServerSocket; ControlBar1: TControlBar; ToolBar1: TToolBar; tbConnect: TToolButton; tbClose: TToolButton; tbDisconnected: TToolButton; Edit1: TEdit; Memo1: TMemo; StatusBar: TStatusBar; procedure tbConnectClick(Sender: TObject); procedure tbDisconnectedClick(Sender: TObject); procedure (Sender: TObject;Socket: TCustomWinSocket); procedure ServerSocketListen(Sender: TObject;Socket: TCustomWinSocket); procedure (Sender: TObject;Socket: TCustomWinSocket); procedure (Sender: TObject;Socket: TCustomWinSocket); procedure tbCloseClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ServerSocketGetSocket(Sender: TObject; Socket: Integer; var ClientSocket: ); procedure (Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); private { Private declarations } public { Public declarations } session: array[0..CMax] of client_record; //客戶端連線陣列 Sessions: integer; //客戶端連線數 end; var frmServerMain: TfrmServerMain; implementation {$R *.DFM} //開啟套接字連線,並使套接字進入監聽狀態 procedure TfrmServerMain.tbConnectClick(Sender: TObject); begin ServerSocket.Open ; end; //關閉套接字連線,不再監聽客戶端的請求 procedure TfrmServerMain.tbDisconnectedClick(Sender: TObject); begin ServerSocket.Close; StatusBar.Panels[0].Text :='伺服器套接字連線已經關閉,無法接受客戶端的連線請求.'; end; //從客戶端讀取資訊 procedure TfrmServerMain.(Sender: TObject;Socket: TCustomWinSocket); var i:integer; begin //將從客戶端讀取的資訊新增到Memo1中 Memo1.Lines.Add(Socket.ReceiveText); for i:=0 to sessions do begin //取得匹配的客戶端 if session[i].CHandle = Socket.SocketHandle then begin session[i].CSocket.SendText('回覆客戶端'+session[i].CAddress+' ==> '+Edit1.Text); end; end; end; //伺服器端套接字進入監聽狀態,以便監聽客戶端的連線 procedure TfrmServerMain.ServerSocketListen(Sender: TObject;Socket: TCustomWinSocket); begin StatusBar.Panels[0].Text :='等待客戶端連線。'; end; //當客戶端連線到伺服器端以後 procedure TfrmServerMain。

6.編寫一個TCP Socket程式

我看盜的時候只有21個小時了,不知道是不是還能趕的上拿分!下邊給出DELPHI的原始碼!--------client---------------------------unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; IdTCPClient1: TIdTCPClient; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);beginif idtcpclient1.Connected then idtcpclient1.Disconnect ;tryidtcpclient1.Host :=edit1.Text ;idtcpclient1.Port :=strtoint(edit2.Text );idtcpclient1.Connect;exceptshowmessage('連線失敗');end;idtcpclient1.WriteLn(edit3.Text );edit3.Text :=idtcpclient1.ReadLn; end;procedure TForm1.FormDestroy(Sender: TObject);beginif idtcpclient1.Connected then idtcpclient1.Disconnect ;end;end.----------------------------------------------------------server--------------------------------unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer;type TForm1 = class(TForm) IdTCPServer1: TIdTCPServer; Button1: TButton; Edit1: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure IdTCPServer1Execute(AThread: TIdPeerThread); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1 : TForm1; i:integer;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin if IdTCPServer1.Active then IdTCPServer1.Active := false; try IdTCPServer1.DefaultPort := strtoint(Edit1.Text); IdTCPServer1.Active := true; except showmessage('啟動失敗'); end;end;procedure TForm1.FormDestroy(Sender: TObject);begin if IdTCPServer1.Active then IdTCPServer1.Active := false;end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);var s : string;begin Memo1.Lines.Add(athread.Connection.ReadLn(s) ); ATHREAD.Connection.WriteLn(inttostr(i)); i:=i+1;end;procedure TForm1.FormCreate(Sender: TObject);begin i:=1;end;end.----------------------------------------------winXP +delphi7編譯通過。

7.安卓開發socket開發簡單例子 怎麼寫

package scut;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Sock {

/**

* 伺服器端

*

* @author Administrator

*

*/

// 程式入口

public static void main(String args[]) {

try {

// 建立一個ServletSocket ,監聽對應的埠,用於監聽客戶端的連線請求

ServerSocket serverSocket = new ServerSocket(40004);

while (true) { // 迴圈不斷接收客戶端的請求

System.out.println("等待客戶端請求。.");

Socket socket = serverSocket.accept();

// 等待接收

System.out.println("收到請求,伺服器建立連線。");

// 返回資料

OutputStream os = socket.getOutputStream();

String msg = "伺服器已連線成功。";

os.write(msg.getBytes("utf-8"));

os.close();

socket.close();

}

}

catch (Exception e) {

e.printStackTrace();

}

}

}

8.socket程式設計怎麼寫一個客戶端和兩個服務端

網路的Socket資料傳輸是一種特殊的I/O,Socket也是一種檔案描述符。

Socket也具有一個類似於開啟檔案的函式呼叫Socket(),該函式返回一個整型的Socket描述符,隨後的連線建立、資料傳輸等操作都是通過該Socket實現的。下面用Socket實現一個windows下的c語言socket通訊例子,這裡我們客戶端傳遞一個字串,伺服器端進行接收。

【伺服器端】#include "stdafx.h"#include #include #include #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:%dn", WSAGetLastError()); closesocket(sListen); //關閉套接字 WSACleanup(); return; }//偵聽連線請求 ret = listen(sListen, 5); if (ret == SOCKET_ERROR) { printf("listen() faild! code:%dn", 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:%dn", 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 connectionn"); break; } nLeft -= ret; ptr += ret; } printf("receive message:%sn", receiveMessage);//列印我們接收到的訊息。

}// closesocket(sListen);// closesocket(sServer);// WSACleanup(); } 【客戶端】#include "stdafx.h"#include #include #include #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。

9.請問Socket程式設計的基本步驟是怎樣的

SERVER端:--------------------------------------------------------import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server extends Thread { private Socket clientSocket; public Server(Socket clientSocket) { this.clientSocket = clientSocket; } public void run() { DataInputStream dis = null; DataOutputStream dos = null; try { dis = new DataInputStream(clientSocket.getInputStream()); dos = new DataOutputStream(clientSocket.getOutputStream()); while (true) { String temp = dis.readUTF(); if ("over".equals(temp)) { break; } dos.writeUTF("from server:" + temp); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (dis != null) { dis.close(); } if (dis != null) { dos.close(); } if (clientSocket != null) { clientSocket.close(); } } catch (IOException e) { } } } public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(8008); while (true) { Socket clientSocket = ss.accept(); // 針對每個客戶端, 啟一個Server執行緒專門處理此客戶端的請求。

Server server = new Server(clientSocket); server.start(); } }}CLIENT端:----------------------------------------import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.Socket;public class Client { public static void main(String[] args) throws Exception { // 輸入流1, 從鍵盤進入Client。 InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); Socket clientSocket = new Socket("127.0.0.1", 8008); // 輸入流2, 從伺服器端進入Client的流物件。

DataInputStream dis = new DataInputStream(clientSocket.getInputStream()); // 輸出流, 從Client出去, 到伺服器端。 DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream()); while (true) { // 從鍵盤輸入讀取 String msg = br.readLine(); // 將讀取資訊傳送給伺服器端 dos.writeUTF(msg); //輸入QuiT退出 if ("QUIT".equals(msg)) { break; } //讀取從伺服器返回的資訊 String temp = dis.readUTF(); System.out.println(temp); } br.close(); dis.close(); dos.close(); clientSocket.close(); }}。

標籤: Socket
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/lzqe1w.html