當前位置:首頁 » 編程語言 » csocketjava

csocketjava

發布時間: 2022-11-26 10:32:11

⑴ j2me socket連接有問題

ssc.acceptAndOpen();
伺服器等待連接,如果沒有連接則阻塞。

你把這兩個Midlet都運行了(先運行伺服器,再客戶端)
伺服器啟動,先等待連接,這時候System.out.println("hello world");不會執行
當客戶端啟動後,看看是不是打出來了?

java上傳文件到伺服器老是報錯socket write error

我用C++中的socket進行傳文件操作,用的是Win socket API,不是VC封裝好的那個CSocket,當我向客戶端上傳文件到服務端的時候

⑶ 關於java socket 的問題

不忍心..
1. 寫個config.txt 內容如下:
ip = xxx.xxx.xxx.xxx
port = ####

2. 寫如下代碼獲取ip和port
Properties prop = new Properties();
InputStream in = new FileInputStream("config.txt");// full path
prop.load(in);
in.close(); // catach exception
String ip = (String)prop.get("ip");
String portValue = (String)prop.get("port");

自己整理下.. Properties 在 java.util 包裡面..

⑷ 急求:網路問題:伯克利套接字是什麼

本文介紹 Windows Sockets 的性質和用途。其他內容還包括:

定義術語「套接字」。
描述 SOCKET 句柄數據類型。
描述套接字的用途。

Windows Sockets 規范為 Microsoft Windows 定義了一個二進制兼容網路編程介面。Windows Sockets 基於 Berkeley Software Distribution(BSD,4.3 版)中的 UNIX 套接字實現,後者是美國加州大學伯克利分校開發的。該規范包括針對 Windows 的 BSD 樣式套接字常式和擴展。通過使用 Windows Sockets,應用程序能夠在任何符合 Windows Sockets API 的網路上通信。在 Win32 上,Windows Sockets 提供線程安全。

許多網路軟體供應商支持網路協議下的 Windows Sockets,這些協議包括:傳輸控制協議/網際協議 (TCP/IP)、Xerox 網路系統 (XNS)、Digital Equipment Corporation 的 DECNet 協議和 Novell Corporation 的互聯網包交換協議/順序分組報文交換協議 (IPX/SPX) 等。雖然目前的 Windows Sockets 規范定義了 TCP/IP 的套接字抽象化,但任何網路協議都可以通過提供自己版本的、實現 Windows Sockets 的動態鏈接庫 (DLL) 來滿足 Windows Sockets。用 Windows Sockets 編寫的商用應用程序示例包括 X Windows 伺服器、終端模擬器和電子郵件系統。

注意: Windows Sockets 的用途是將基礎網路抽象出來,這樣,您不必對網路非常了解,並且您的應用程序可在任何支持套接字的網路上運行。因此,本文檔不討論網路協議的細節內容。

Microsoft 基礎類庫 (MFC) 通過提供兩個類來支持使用 Windows Sockets API 進行編程。其中一個類為 CSocket ,它提供高級抽象化來簡化網路通信編程。

Windows Sockets 規范「Windows Sockets:用於 Microsoft Windows 環境下的網路計算的開放介面」現在為 1.1 版本,它是 TCP/IP 群體中一個由個人和公司組成的大團體開發的,是一個開放的網路標准,可免費使用。套接字編程模型當前支持一個「通信域」,該「通信域」使用網際協議組 (Internet Protocol Suite)。該規范可在 Platform SDK 中獲得。

提示: 因為套接字使用網際協議組,所以它們對於支持「信息高速公路」上 Internet 通信的應用程序是首選方式。

套接字的定義

套接字是一個通信終結點,它是 Windows Sockets 應用程序用來在網路上發送或接收數據包的對象。套接字具有類型,與正在運行的進程相關聯,並且可以有名稱。目前,套接字一般只與使用網際協議組的同一「通信域」中的其他套接字交換數據。

這兩種套接字都是雙向的,是可以同時在兩個方向上(全雙工)進行通信的數據流。

可用的套接字類型有以下兩種:

流式套接字

流式套接字提供沒有記錄邊界的數據流,即位元組流。位元組流能確保以正確的順序無重復地被送達。

數據文報套接字

數據文報套接字支持面向記錄的數據流,但不能確保能被送達,也無法確保按照發送順序或不重復。

「有序」指數據包按發送的順序送達。「不重復」指一個特定的數據包只能獲取一次。

注意: 在某些網路協議下(如 XNS),流可以面向記錄,即作為記錄流而非位元組流。但在更常用的 TCP/IP 協議下,流為位元組流。Windows Sockets 提供與基礎協議無關的抽象化級別。

有關上述類型以及各種套接字適用情形的信息,請參見 Windows Sockets:流式套接字和 Windows Sockets:數據文報套接字。

SOCKET 數據類型

每一個 MFC 套接字對象封裝一個 Windows Sockets 對象的句柄。該句柄的數據類型為 SOCKET。SOCKET 句柄類似於窗口的 HWND。MFC 套接字類提供對封裝句柄的操作。

Platform SDK 中詳細描述了 SOCKET 數據類型。

套接字的用途

套接字的作用非常大,至少在下面三種通信上下文中如此:

客戶端/伺服器模型。
對等網路方案,如聊天應用程序。
通過讓接收應用程序將消息解釋為函數調用來進行遠程過程調用 (RPC)。

⑸ 如何創建一個CSocket類的派生類

類向導 繼承CSocket 就行了

⑹ java socket 阻塞和非阻塞 會對數據傳輸有什麼影響

阻塞 阻塞調用是指調用結果返回之前,當前線程會被掛起。函數只有在得到結果之後才會返回。有人也許會把阻塞調用和同步調用等同起來,實際上他是不同的。對於同步調用來說,很多時候當前線程還是激活的,只是從邏輯上當前函數沒有返回而已。例如,我們在CSocket中調用Receive函數,如果緩沖區中沒有數據,這個函數就會一直等待,直到有數據才返回。而此時,當前線程還會繼續處理各種各樣的消息。如果主窗口和調用函數在同一個線程中,除非你在特殊的界面操作函數中調用,其實主界面還是應該可以刷新。socket接收數據的另外一個函數recv則是一個阻塞調用的例子。當socket工作在阻塞模式的時候,如果沒有數據的情況下調用該函數,則當前線程就會被掛起,直到有數據為止。 非阻塞 非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回。 對象的阻塞模式和阻塞函數調用 對象是否處於阻塞模式和函數是不是阻塞調用有很強的相關性,但是並不是一一對應的。阻塞對象上可以有非阻塞的調用方式,我們可以通過一定的API去輪詢狀態,在適當的時候調用阻塞函數,就可以避免阻塞。而對於非阻塞對象,調用特殊的函數也可以進入阻塞調用。函數select就是這樣的一個例子

⑺ 這段java代碼是什麼意思

這一段代碼是Java多線程和Socket通信相關的,大致一看跟一般的聊天室demo有些相似
建議您先學習一下Java多線程的基礎知識
了解一下Runable介面和Thread類,以及了解相關Socket初步知識

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

/**
一個多線程的類,實現了Runable介面
*/
{
Socketcsocket;

/**
構造器,傳入一個Sock對象
*/
MultiThreadServer(Socketcsocket){
this.csocket=csocket;
}

/**
主函數入口
*/
publicstaticvoidmain(Stringargs[])
throwsException{
//實例化一個socket對象
ServerSocketssock=newServerSocket(1234);
System.out.println("Listening");
while(true){
Socketsock=ssock.accept();
System.out.println("Connected");
//啟動線程
newThread(newMultiThreadServer(sock)).start();
}
}

/**
線程的run方法
*/
publicvoidrun(){
try{
PrintStreampstream=newPrintStream
(csocket.getOutputStream());
for(inti=100;i>=0;i--){
pstream.println(i+
"bottlesofbeeronthewall");
}
pstream.close();
csocket.close();
}
catch(IOExceptione){
System.out.println(e);
}
}
}

⑻ 跪求凌陽61單片機設計的語音識別系統的主程序

凌陽61單片機實現RCL,由C語言編寫,凌陽61板實現功能-,C++ Builder,單片機開發/SCM
autocad預覽控制項.不需要安裝autocad即可在界面瀏覽-,Delphi,繪圖程序/Graph Drawing
本程序為基於matlab的小波分析的應用實例。-,matlab,界面編程/GUI Develop
高通brew平台上的BUIW控制項中的ImageStaticWidget使用示例-,Visual C++,Static控制項/Static control
客觀合理化一天一片人體豆腐花規范化廣泛非官方大哥大法國-,C++ Builder,界面編程/GUI Develop
本程序為基於matlab的插值分析與Euler解常微分方程的應用實例。-,matlab,界面編程/GUI Develop
用ASP.NET做的酒店管理系統,該系統主要處理酒店日常運營中涉及的客戶信息.-,ASP,其他書籍/Other Books
EVC 讀寫INI文件 EVC 讀寫INI文件EVC 讀寫INI文件EVC 讀寫INI文件EVC 讀寫INI文件-,Visual C++,文件操作/File Operate
本程序介紹基於matlab的平方根及改進平方根演算法。-,matlab,按鈕控制項/Button control
高通brew平台上的BUIW控制項中的slider的示常式序-,Visual C++,界面編程/GUI Develop
塔頂地無可奈何花落去 人威風掃地雪 可耕地枯無可奈何花落去 無可奈何花落去餓-,Visual C++,GDI/圖象編程/GDI-Bitmap
oblog31sql oblog31sql oblog31sql oblog31sql oblog31sql-,ASP,Web伺服器/Web Server
MATLAB實現簡單圖象處理的程序,在matlab2006a上通過-,matlab,matlab常式/matlab
源碼、運行程序、幫助文件、必須的資料庫文件-,Windows_Unix,C#編程/CSharp
dos下的TCP/IP棧庫函數,並提供了多種tcp/ip編程demo。 -,DOS,TCP/IP協議棧/TCP/IP Stack
MATLAB進入時顯示的圖標的程序實現,有動畫效果!-,matlab,matlab常式/matlab
地方官梵蒂岡地方官法 方法方法方法方法方法 -,Unix_Linux,TreeView控制項/TreeView
幾個matlab的編程實例,對初學者有一定的幫助。-,matlab,界面編程/GUI Develop
用ASP.NET做的客戶管理系統,該系統以客戶管理中涉及的銷售管理,合同管理為主體.-,ASP,其他書籍/Other Books
畢畢剝剝畢畢剝剝爸爸 畢畢剝剝畢畢剝剝爸爸 -,DOS,Static控制項/Static control
將資料庫的資料轉檔到EXCEL里進行保存-,Delphi,其他小程序/Other windows programs
數字圖像中隊圖像進行模板匹配演算法之前的預處理演算法!-,Visual C++,圖形/文字識別/Graph Recognize
存車處存車處存車處廠 滴滴答答滴滴答答得到 -,DOS,編輯框/EditBox
實數編碼GA,也是從網上下載的。非要上傳5個才能下載,哎,實在是沒辦法啊,這個也不知道能不能運行,不能的話請不要罵我哦,謝謝!!-,Visual C++,人工智慧/AI-NN-PR
DS1302+AT89C2051的LED鍾,可以顯示年、周、月、日、小時、分鍾、秒-,TEXT,其他小程序/Other windows programs
可耕地 唇形枯 要一地三三大哥有在一碼元表的有遙有-,Visual C++,TreeView控制項/TreeView
用JAVA寫的遺傳演算法的例子,比較簡單,如果解壓縮的時候需要密碼的話,應該是「1」。寫的比較簡單。是老早以前寫的了。-,Java,人工智慧/AI-NN-PR
匯編語言,用C51單片機實現交通燈控制!二極體模擬發光!-,Asm,單片機開發/SCM
通過串口控制步進電機控制器,實現聯絡,速度控制,步長-,Visual C++,串口編程/Com Port
絕佳的Tab View控制項的方式之一,VC++6.0經過運行調試的,可直接使用-,Visual C++,TreeView控制項/TreeView
以某中小規模汽車維修廠為案例,用ASP.NET做的倉庫管理系統.-,ASP,其他書籍/Other Books
關機程序。。。。。。。。。。。。。。。。。-,Visual C++,Windows編程/Windows Develop
絕佳的Tab View控制項的方式之二,VC++6.0經過運行調試的,可直接使用-,Visual C++,界面編程/GUI Develop
在VC6下基於OpenCV的輪廓檢測程序,其中圖像的二值化操作基於Canny和自適應閾值。通過trackbar來實現不同情況下的輪廓檢測。-,Visual C++,圖形/文字識別/Graph Recognize
絕佳的Tab View控制項的方式之三,VC++6.0經過運行調試的,可直接使用-,Visual C++,界面編程/GUI Develop
用於首先獲取需要下載的文件的大小,然後將其分塊下載。-,Java,網路編程/WinSock-NDIS
用csocket模擬聊天室,可以在一台機子上模擬,也可以在不同機子上-,Visual C++,網路編程/WinSock-NDIS
這個好象也是從網路上找到一個基本遺傳演算法的例子,解壓縮的時候如果需要密碼的話,應該是「1」。-,Visual C++,人工智慧/AI-NN-PR
本程序是運用java 語言 編寫一款查看 網站源文件的程序 -,Java,其他/Other systems
使用C語言實現菜單控制的源程序,實現了學生成績的管理.-,C-C++,界面編程/GUI Develop
在打開圖像時,點擊圖像可在打開對話框中實時看到預覽,絕好.-,Visual C++,界面編程/GUI Develop
用ASP.NET做的合同管理系統,該系統包括合同進展控制模塊,員工管理模塊,客戶管理模塊,項目管理模塊,合同管理模塊和合同統計模塊等.-,ASP,其他書籍/Other Books
語音識別與合成工具箱.具有如下功能:時域分析,頻域分析,LPC分析與合成等.-,matlab,matlab常式/matlab

⑼ 易語言實時檢測

[轉]基於多線程的CSocket網路編程技術

收藏人:BuYuLibrary

2015-06-09 | 閱:1 轉:20
MFC下使用CSocket或者CAsyncSocket進行Socket通信,CSocket繼承自CAsyncSocket。這兩者的區別在於,CSocket是同步的Socket,CAsyncSocket則是非同步的。使用時,CSocket::Receive()和CSocket::Send()函數會阻塞當前線程,直至操作完成;而CAsyncSocket::Receive()和CAsyncSocket::Send()函數則不阻塞線程,函數立即返回。所以這兩者在使用方式上有所不同。這里探討一種使用CSocket配合CSocketFile、CArchive和CThread的多線程C/S模式。
{網路通信主要有阻塞和非阻塞兩種編程,前者是可靠連接通信(相當於一問須一答方式),後者只是傳聲筒,只管發出去,不管接收}
CSocket通過CSocketFile由CArchive管理,可以得到類似iostream方式的流輸入輸出。這種方式的主要過程有:創建連接、接受數據、發送數據和斷開連接。CSocket必須附加在與其一起工作的線程上,不能通過其他線程調用,所以主要通過在線程之間的傳遞消息和加鎖實現線程的通信和同步。我們將分服務端(Server)和客戶端(Client)分別討論具體實現。
{流文件方式通信,很方便對各數據類型讀寫操作,實現數據傳輸(JAVA基本傳輸就是這種模式)。CSocket必須在一個工作線程內實現,不能分開在不同的線程上}
1.服務端
服務端有一個主界面,其類為CSCEServerDlg,繼承自CDialog,它保存線程池和鎖。為了簡單起見,後面的類聲明中大部分的成員變數訪問控制都是public。{主應用程序線程,採用線程池(保存線程的列表)和鎖進行同步運行控制,創建服務端的Socket(m_socketListen)監聽客戶連接。}聲明類似如下:

typedef list<CWinThread*> PThreadList;
class CSCEServerDlg : public CDialog
{
...
public:

CCriticalSection m_csThrdList; // 線程池鎖
PThreadList m_thrdList; // 線程池
int m_thrdIndex; // 線程計數器

CServerSocket m_socketListen // 監聽CSocket

};
和CSocket一起工作的線程類為CSerSocketThread,繼承自CWinThread。這里使用CWinThread是因為它可以處理消息,這樣便於線程間通信。重載了CWinThread::InitInstance(),在線程建立時做處理,具體實現在後面會有。聲明如下:{採用可以處理消息傳遞的CWinThread線程類,把Socket工作綁定到該線程上去}

class CSerSocketThread : public CWinThread
{
DECLARE_DYNCREATE(CSerSocketThread)
public:
CSerSocketThread(void);
~CSerSocketThread(void);
virtual int ExitInstance();
virtual BOOL InitInstance();
int m_thrdIndex;

CSCEServerDlg* m_pSerDlg; // 主界面指針

SOCKET m_hSocket; // Socket 句柄
CServerSocket m_serverSocket; // 附加在這個線程上的CSocket
CSocketFile* m_socketFile; // CSocketFile

CArchive* m_arIn; // 輸入CArchive
CArchive* m_arOut; // 輸出CArchive
...

protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnCustomMsg(WPARAM wParam,LPARAM lParam);
void ReceiveData();
void SendData(const int WP, const CString& strMsg);
...
};
我們使用的具體的CSocket類是CServerSocket,繼承自CSocket,重載了CSocket::OnAccept()函數和CSocket::OnReceive()函數。監聽埠的CSocket在有Socket連接時會調用OnAccept()函數處理連接的建立。當已經連接的CSocket接收到數據時,則會調用OnReceive()函數,這里要注意的是,如果對方發送的數據較大,則有可能被分成多次發送,這種情況下會多次調用OnReceive()函數,後面會提高如何來處理這個問題。同樣的道理,在發送數據時則會調用OnSend()函數,這里我們不會用到它。{服務端的Socket類主要是接收客戶端的連接和接收客戶端數據,當接收數據很大時,採用多次發送和接收方式(這是採用CSocketFile方式的好處,自動處理數據量傳輸大小)}

CServerSocket的聲明:

class CServerSocket :
public CSocket
{
public:
CServerSocket(void);

~CServerSocket(void);
virtual void OnAccept(int nErrorCode);
virtual void OnReceive(int nErrorCode);
CSCEServerDlg* m_pSerDlg; // 主界面指針
CWinThread* m_pThrd; // 該CSocket所在的線程
int m_thrdIndex; // 該CSocket所屬線程的index,服務 Socket 為 -1
};
{除了Socket類綁定到工作線程上,Socket類中也包含其工作線程指針和主程序指針}
OnAccept()函數的實現:
void CServerSocket::OnAccept(int nErrorCode)
{
// TODO: 在此添加專用代碼和/或調用基類
if(nErrorCode == 0)
{
// 創建一個連接Socket
CServerSocket connectSocket;
Accept(connectSocket); // connectSocket將和客戶端連接
// 創建一個線程

CSerSocketThread* pThread =
(CSerSocketThread*)AfxBeginThread(
RUNTIME_CLASS(CSerSocketThread),

THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
{服務端Socket得到客服端連接,要創建一個連接的Socket與客戶端連接通信(以後這個連接Socket與客戶端綁定通信),創建一個線程來為連接Socket服務}
// 添加到線程池中
m_pSerDlg->m_csThrdList.Lock(); // 加鎖
m_pSerDlg->m_thrdList.push_back(pThread);
m_pSerDlg->m_csThrdList.Unlock(); // 解鎖

pThread->m_pSerDlg = m_pSerDlg;
/*
* 將CSocket交給新建的線程
* 這樣這個CSocket將和新建的線程一起工作
* 注意現在是在界面線程中,因為是監聽CSocket,是CServerDlg的成員變數
* 必須通過Detach()得到HANDLE之後在工作線程中重新Attach()才行
*/
{如何把創建的Socket綁定到新建的工作線程中?現在用服務端Socket是在主應用程序中,用Detach、attach對Socket進行解綁、加綁,即把主線程中創建的連接Socket「離開」主線程,附加在工作線程上}
pThread->m_hSocket = connectSocket.Detach();
// 線程編號,通過這個在通信時區別不同的客戶端
{如何區分各工作線程(與客戶端連接通信的Socket)?通過主程序(主線程)中的id標示}
pThread->m_thrdIndex = m_pSerDlg->m_thrdIndex++;
// 啟動線程
pThread->ResumeThread();
}
CSocket::OnAccept(nErrorCode);
}
當監聽CSocket監聽到有客戶端接入,調用OnAccept()函數。通過Accept()函數將連接建立,之後建立一個新的線程,讓連接的CSocket附加上去,將線程加入線程池,OnAccept()函數的主要工作就完成了。
{各連接客戶端的工作線程是在監聽接受函數中創建}
OnReceive()函數的實現:

void CServerSocket::OnReceive(int nErrorCode)
{
// 通過自定義消息WM_THREAD和消息參數WP_RECV通知線程去讀取數據
{由Socket綁定的線程通過消息去通知接收數據}
m_pThrd->PostThreadMessage(WM_THREAD, WP_RECV, 0);
//CSocket::OnReceive(nErrorCode);
}
當接收到數據時,CServerSocket就通知它附加的線程去接收數據,以便進一步處理。
下面看一下CSerSocketThread的幾個處理的實現:
InitInstance()函數,這個函數在新線程被構造出來後調用,用來完成一些自定義的新建過程:
BOOL CSerSocketThread::InitInstance()
{
// TODO: 在此添加專用代碼和/或調用基類
if (!AfxSocketInit()) // 初始化CSocket必須調用的
{
return CWinThread::InitInstance(); // 立刻退出
}
{對服務端Socket附加的socket句柄}
if(m_serverSocket.Attach(m_hSocket)) // 重新Attach之前傳入的Socket
{
m_serverSocket.m_pThrd = this; // 告訴CSocket它所附加工作的線程
m_serverSocket.m_thrdIndex = m_thrdIndex;
m_serverSocket.m_pSerDlg = m_pSerDlg;
// 建立CSocketFile,將CSocket附加在上面
{把服務端Socket綁定到sockfile上,通信採用文件流方式進行}
m_socketFile = new CSocketFile(&m_serverSocket);
// 輸入CArchive
m_arIn = new CArchive(m_socketFile, CArchive::load);
// 輸出CArchive
m_arOut = new CArchive(m_socketFile, CArchive::store);
return TRUE; // 這樣線程就不會立刻退出
}
return CWinThread::InitInstance(); // 立刻退出
}
當新線程構造好了之後,InitInstance()函數被調用。將傳入的CSocket的HANDLE重新Attach到線程自己的CSocket成員上,之後建立CSocketFile和兩個CArchive用於輸入輸出,這里CSocketFile會互斥訪問,輸入和輸出的CArchive無法並發操作它。
{新線程構造調用InitInstance(),應是線程啟動調用}
之前的CServerSocket::OnReceive()中通過消息通知線程來接受數據,下面看具體的實現。
首先聲明將WM_THREAD消息綁定到CSerSocketThread::OnCustomMsg()函數:

BEGIN_MESSAGE_MAP(CSerSocketThread, CWinThread)
ON_THREAD_MESSAGE(WM_THREAD, OnCustomMsg)
...
END_MESSAGE_MAP()
OnCustomMsg()函數的實現:

void CSerSocketThread::OnCustomMsg(WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
case WP_RECV:
// 接收數據
// 先把接收數據事件關掉
{關閉接受數據,避免後續接受數據不停傳來,造成處理堵塞,這樣讀寫一次完成}
m_serverSocket.AsyncSelect(FD_CLOSE);
*m_arIn >> ...; // 讀取數據
// 重新打開接收數據事件
m_serverSocket.AsyncSelect(FD_READ|FD_CLOSE);
...
break;
...
}
}
接收到的WM_THREAD消息包含WP_RECV的消息參數後,首先先關掉接收數據事件,這樣就可以通過CArchive的operator >>一次讀取完所有數據(根據自己定義的方式),讀取完成後再打開接收數據事件。通過這個流程,每次數據發送就只會調用一次OnReceive()函數。這里要注意的是必須用CArchive的operator >>根據發送的情況正確的讀取數據,最好都讀取出來,否則下次讀取時可能會出現錯誤。
{CArchive讀寫順序要一致}
如果需要發送數據,則在CSerSocketThread線程中使用CArchive的operator <<發送所有支持operator <<的類型。注意的是必須是在這個工作線程中調用,CSocket是附加在線程上的,同樣CArchive也只能在工作線程上使用,如果通過別的線程調用,就和系統的Socket表不對應了。另外還有注意的是輸出完後需要顯式調用CArchive::Flush()將數據發出。
{同一線程讀寫(接收和發射)}
主界面對CServerSocket的使用則比較簡單,如下:

m_socketListen.m_pSerDlg = this;
if (!AfxSocketInit()) // Socket初始化
SomeMessageFunc("SOCKET 初始化失敗!");
else if (!m_socketListen.Create(xxxx)) // 創建監聽Socket
SomeMessageFunc("監聽 SOCKET 創建失敗!");
else if (!m_socketListen.Listen()) // Socket監聽
SomeMessageFunc("監聽 SOCKET 監聽失敗!");
else
SomeMessageFunc("監聽建立");
2.客戶端
客戶端部分的大部分處理和服務端是類似的,主要區別在於客戶端主動連接服務端的監聽埠。客戶端首先建立工作線程,在線程重載的InitInstance()函數中建立到服務端的連接,成功就繼續工作,失敗就停止線程即可。之後當CSocket接收數據是,調用重載的OnReceive()函數,通過消息通知工作線程使用CArchive讀取數據。發送時則由工作線程使用CArchive發送數據,顯式調用CArchive::Flush()。
{客戶端必須知道伺服器端IP和工作埠,才能連接}
連接代碼,依然是在:

BOOL CCliSocketThread::InitInstance()
{
// TODO: 在此添加專用代碼和/或調用基類
if (!AfxSocketInit()) // 一樣的初始化,必須調用
{
return CWinThread::InitInstance();
}
if (!m_clientSocket.Create()) // 建立CSocket
{
SomeMessageFunc("Socket 創建失敗");
return CWinThread::InitInstance();
}
m_clientSocket.m_pCliDlg = m_pCliDlg;
CString strIP(」xxx.xxx.xxx.xxx」);
UINT port = xxxx;
if (m_clientSocket.Connect(strIP, port)) // 連接服務端
{
// 連接建立
m_clientSocket.m_thrd = this;
m_socketFile = new CSocketFile(&m_clientSocket);
m_arIn = new CArchive(m_socketFile, CArchive::load);
m_arOut = new CArchive(m_socketFile, CArchive::store);
SomeMessageFunc("連接成功");
return TRUE; // 線程繼續工作
}
return CWinThread::InitInstance();
}

⑽ java,能詳細解析下這段程序嗎,表示看不懂=。=

一個是伺服器端的socket監聽,一直等待客戶端請求,另一個是客戶端的socket 向伺服器端發送請求

熱點內容
定義dns伺服器的ip 發布:2025-05-17 20:32:37 瀏覽:952
android判斷圖片 發布:2025-05-17 20:32:33 瀏覽:832
安卓12什麼時候適配小米 發布:2025-05-17 20:31:47 瀏覽:69
c語言字元串初始化 發布:2025-05-17 20:18:43 瀏覽:35
安卓融e聯推送需要什麼許可權 發布:2025-05-17 20:18:39 瀏覽:268
我的世界無限武魂伺服器 發布:2025-05-17 20:17:09 瀏覽:371
安卓手游腳本語言 發布:2025-05-17 19:53:07 瀏覽:21
找圈演算法 發布:2025-05-17 19:49:19 瀏覽:410
資料庫的存取方法 發布:2025-05-17 19:48:36 瀏覽:125
androidapp測試 發布:2025-05-17 19:48:19 瀏覽:389