開心生活站

位置:首頁 > 綜合知識 > 

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