老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

vb.net網口通訊6 vb網口通信

VB.NET串口通訊怎么發送和接收十六進制?

串口通信最終都是用二進制傳輸的,你用代碼把二進制轉化成十六進制就可以了。不需要額外設置。

專注于為中小企業提供網站設計制作、成都網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業措美免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了1000+企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

用vb.net實現網絡通信

用 vb.net socket通信

Dim th As Threading.Thread

2 Dim tcpl As System.Net.Sockets.TcpListener

3

4 Private Sub Form1_Load()Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

5 th = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf MyListen))

6 th.Start()

7 End Sub

8

9 Public Sub SendMessage()Sub SendMessage(ByVal IP As String, ByVal SendMsg As String)

10 Try

11 If IP "" Then

12 Dim tcpc As New System.Net.Sockets.TcpClient(IP, 5656)

13 Dim tcpStream As Net.Sockets.NetworkStream = tcpc.GetStream

14 Dim reqStream As New IO.StreamWriter(tcpStream)

15 reqStream.Write(SendMsg)

16 reqStream.Flush()

17 tcpStream.Close()

18 tcpc.Close()

19 End If

20 Catch ex As Exception

21 MsgBox(ex.Message.ToString)

22 End Try

23 End Sub

24 Private Sub MyListen()Sub MyListen()

25 Try

26 Dim ipAddress As System.Net.IPAddress = System.Net.Dns.Resolve(System.Net.Dns.GetHostName).AddressList(0)

27 tcpl = New System.Net.Sockets.TcpListener(ipAddress, 5656)

28 tcpl.Start()

29 While True

30 Dim s As System.Net.Sockets.Socket = tcpl.AcceptSocket()

31 Dim MyBuffer(1024) As Byte

32 Dim i As Integer

33 i = s.Receive(MyBuffer)

34 If i 0 Then

35 Dim lstrRec As String

36 Dim j As Integer

37 For j = 0 To i - 1

38 TextBox1.Text += Chr(MyBuffer(j)) ","

39 Next

40 End If

41 End While

42 Catch ex As Exception

43 MsgBox(ex.Message.ToString)

44 End Try

45 End Sub

46

47 Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

48 SendMessage("192.168.0.61", TextBox2.Text)

49 End Sub

用vb.net做串口通訊程序要調用哪些api函數?

串口API通信函數編程

16位串口應用程序中,使用的16位的Windows API通信函數:

①OpenComm()打開串口資源,并指定輸入、輸出緩沖區的大小(以字節計)

CloseComm() 關閉串口;

例:int idComDev;

idComDev = OpenComm("COM1", 1024, 128);

CloseComm(idComDev);

②BuildCommDCB() 、setCommState()填寫設備控制塊DCB,然后對已打開的串口進行參數配置; 例:DCB dcb;

BuildCommDCB("COM1:2400,n,8,1", dcb);

SetCommState(dcb);

③ ReadComm 、WriteComm()對串口進行讀寫操作,即數據的接收和發送.

例:char *m_pRecieve; int count;

ReadComm(idComDev,m_pRecieve,count);

Char wr[30]; int count2;

WriteComm(idComDev,wr,count2);

16位下的串口通信程序最大的特點就在于:串口等外部設備的操作有自己特有的API函數;而32位程序則把串口操作(以及并口等)和文件操作統一起來了,使用類似的操作。

在MFC下的32位串口應用程序

32位下串口通信程序可以用兩種方法實現:利用ActiveX控件;使用API 通信函數。

使用ActiveX控件,程序實現非常簡單,結構清晰,缺點是欠靈活;使用API 通信函數的優缺點則基本上相反。

使用ActiveX控件:

VC++ 6.0提供的MSComm控件通過串行端口發送和接收數據,為應用程序提供串行通信功能。使用非常方便,但可惜的是,很少有介紹MSComm控件的資料。

⑴.在當前的Workspace中插入MSComm控件。

Project菜單------Add to Project----Components and Controls-----Registered

ActiveX Controls---選擇Components: Microsoft Communications Control,

version 6.0 插入到當前的Workspace中。

結果添加了類CMSComm(及相應文件:mscomm.h和mscomm.cpp )。

⑵.在MainFrm.h中加入MSComm控件。

protected:

CMSComm m_ComPort;

在Mainfrm.cpp::OnCreare()中:

DWORD style=WS_VISIBLE|WS_CHILD;

if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){

TRACE0("Failed to create OLE Communications Control\n");

return -1; // fail to create

}

⑶.初始化串口

m_ComPort.SetCommPort(1); //選擇COM?

m_ComPort. SetInBufferSize(1024); //設置輸入緩沖區的大小,Bytes

m_ComPort. SetOutBufferSize(512); //設置輸入緩沖區的大小,Bytes//

if(!m_ComPort.GetPortOpen()) //打開串口

m_ComPort.SetPortOpen(TRUE);

m_ComPort.SetInputMode(1); //設置輸入方式為二進制方式

m_ComPort.SetSettings("9600,n,8,1"); //設置波特率等參數

m_ComPort.SetRThreshold(1); //為1表示有一個字符引發一個事件

m_ComPort.SetInputLen(0);

⑷.捕捉串口事項。MSComm控件可以采用輪詢或事件驅動的方法從端口獲取數據。我們介紹比較使用的事件驅動方法:有事件(如接收到數據)時通知程序。在程序中需要捕獲并處理這些通訊事件。

在MainFrm.h中:

protected:

afx_msg void OnCommMscomm();

DECLARE_EVENTSINK_MAP()

在MainFrm.cpp中:

BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )

ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE) //映射ActiveX控件事件

END_EVENTSINK_MAP()

⑸.串口讀寫. 完成讀寫的函數的確很簡單,GetInput()和SetOutput()就可。兩個函數的原型是:

VARIANT GetInput();及 void SetOutput(const VARIANT newValue);都要使用VARIANT類型(所有Idispatch::Invoke的參數和返回值在內部都是作為VARIANT對象處理的)。

無論是在PC機讀取上傳數據時還是在PC機發送下行命令時,我們都習慣于使用字符串的形式(也可以說是數組形式)。查閱VARIANT文檔知道,可以用BSTR表示字符串,但遺憾的是所有的BSTR都是包含寬字符,即使我們沒有定義_UNICODE_UNICODE也是這樣! WinNT支持寬字符, 而Win95并不支持。為解決上述問題,我們在實際工作中使用CbyteArray,給出相應的部分程序如下:

void CMainFrame::OnCommMscomm(){

VARIANT vResponse; int k;

if(m_commCtrl.GetCommEvent()==2) {

k=m_commCtrl.GetInBufferCount(); //接收到的字符數目

if(k0) {

vResponse=m_commCtrl.GetInput(); //read

SaveData(k,(unsigned char*) vResponse.parray-pvData);

} // 接收到字符,MSComm控件發送事件 }

。。。。。 // 處理其他MSComm控件

}

void CMainFrame::OnCommSend() {

。。。。。。。。 // 準備需要發送的命令,放在TxData[]中

CByteArray array;

array.RemoveAll();

array.SetSize(Count);

for(i=0;iCount;i++)

array.SetAt(i, TxData[i]);

m_ComPort.SetOutput(COleVariant(array)); // 發送數據 }

二 使用32位的API 通信函數:

⑴.在中MainFrm.cpp定義全局變量

HANDLE hCom; // 準備打開的串口的句柄

HANDLE hCommWatchThread ;//輔助線程的全局函數

⑵.打開串口,設置串口

hCom =CreateFile( "COM2", GENERIC_READ | GENERIC_WRITE, // 允許讀寫

0, // 此項必須為0

NULL, // no security attrs

OPEN_EXISTING, //設置產生方式

FILE_FLAG_OVERLAPPED, // 我們準備使用異步通信

NULL );

我使用了FILE_FLAG_OVERLAPPED結構。這正是使用API實現非阻塞通信的關鍵所在。

ASSERT(hCom!=INVALID_HANDLE_VALUE); //檢測打開串口操作是否成功

SetCommMask(hCom, EV_RXCHAR|EV_TXEMPTY );//設置事件驅動的類型

SetupComm( hCom, 1024,512) ; //設置輸入、輸出緩沖區的大小

PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR

| PURGE_RXCLEAR ); //清干凈輸入、輸出緩沖區

COMMTIMEOUTS CommTimeOuts ; //定義超時結構,并填寫該結構

…………

SetCommTimeouts( hCom, CommTimeOuts ) ;//設置讀寫操作所允許的超時

DCB dcb ; // 定義數據控制塊結構

GetCommState(hCom, dcb ) ; //讀串口原來的參數設置

dcb.BaudRate =9600; dcb.ByteSize =8; dcb.Parity = NOPARITY;

dcb.StopBits = ONESTOPBIT ;dcb.fBinary = TRUE ;dcb.fParity = FALSE;

SetCommState(hCom, dcb ) ; //串口參數配置

上述的COMMTIMEOUTS結構和DCB都很重要,實際工作中需要仔細選擇參數。

⑶啟動一個輔助線程,用于串口事件的處理。

Windows提供了兩種線程,輔助線程和用戶界面線程。輔助線程沒有窗口,所以它沒有自己的消息循環。但是輔助線程很容易編程,通常也很有用。

在次,我們使用輔助線程。主要用它來監視串口狀態,看有無數據到達、通信有無錯誤;而主線程則可專心進行數據處理、提供友好的用戶界面等重要的工作。

hCommWatchThread=

CreateThread( (LPSECURITY_ATTRIBUTES) NULL, //安全屬性

0,//初始化線程棧的大小,缺省為與主線程大小相同

(LPTHREAD_START_ROUTINE)CommWatchProc, //線程的全局函數

GetSafeHwnd(), //此處傳入了主框架的句柄

0, dwThreadID );

ASSERT(hCommWatchThread!=NULL);

⑷為輔助線程寫一個全局函數,主要完成數據接收的工作。請注意OVERLAPPED結構的使用,以及怎樣實現了非阻塞通信。

UINT CommWatchProc(HWND hSendWnd){

DWORD dwEvtMask=0 ;

SetCommMask( hCom, EV_RXCHAR|EV_TXEMPTY );//有哪些串口事件需要監視?

WaitCommEvent( hCom, dwEvtMask, os );// 等待串口通信事件的發生

檢測返回的dwEvtMask,知道發生了什么串口事件:

if ((dwEvtMask EV_RXCHAR) == EV_RXCHAR){ // 緩沖區中有數據到達

COMSTAT ComStat ; DWORD dwLength;

ClearCommError(hCom, dwErrorFlags, ComStat ) ;

dwLength = ComStat.cbInQue ; //輸入緩沖區有多少數據?

if (dwLength 0) { BOOL fReadStat ;

fReadStat = ReadFile( hCom, lpBuffer,dwLength, dwBytesRead,READ_OS( npTTYInfo ) ); //讀數據

注:我們在CreareFile()時使用了FILE_FLAG_OVERLAPPED,現在ReadFile()也必須使用

LPOVERLAPPED結構.否則,函數會不正確地報告讀操作已完成了.

使用LPOVERLAPPED結構, ReadFile()立即返回,不必等待讀操作完成,實現非阻塞

通信.此時, ReadFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING.

if (!fReadStat){

if (GetLastError() == ERROR_IO_PENDING){

while(!GetOverlappedResult(hCom,READ_OS( npTTYInfo ), dwBytesRead, TRUE )){

dwError = GetLastError();

if(dwError == ERROR_IO_INCOMPLETE) continue;//緩沖區數據沒有讀完,繼續

…… ……

::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,0);//通知主線程,串口收到數據}

所謂的非阻塞通信,也即異步通信。是指在進行需要花費大量時間的數據讀寫操作(不僅僅是指串行通信操作)時,一旦調用ReadFile()、WriteFile(), 就能立即返回,而讓實際的讀寫操作在后臺運行;相反,如使用阻塞通信,則必須在讀或寫操作全部完成后才能返回。由于操作可能需要任意長的時間才能完成,于是問題就出現了。

非常阻塞操作還允許讀、寫操作能同時進行(即重疊操作?),在實際工作中非常有用。

要使用非阻塞通信,首先在CreateFile()時必須使用FILE_FLAG_OVERLAPPED;然后在 ReadFile()時lpOverlapped參數一定不能為NULL,接著檢查函數調用的返回值,調用GetLastError(),看是否返回ERROR_IO_PENDING。如是,最后調用GetOverlappedResult()返回重疊操作(overlapped operation)的結果;WriteFile()的使用類似。

⑸.在主線程中發送下行命令。

BOOL fWriteStat ; char szBuffer[count];

…………//準備好發送的數據,放在szBuffer[]中

fWriteStat = WriteFile(hCom, szBuffer, dwBytesToWrite,

dwBytesWritten, WRITE_OS( npTTYInfo ) ); //寫數據

//我在CreareFile()時使用了FILE_FLAG_OVERLAPPED,現在WriteFile()也必須使用LPOVERLAPPED結構.否則,函數會不正確地報告寫操作已完成了.

使用LPOVERLAPPED結構,WriteFile()立即返回,不必等待寫操作完成,實現非阻塞 通信.此時, WriteFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING.

int err=GetLastError();

if (!fWriteStat) {

if(GetLastError() == ERROR_IO_PENDING){

while(!GetOverlappedResult(hCom, WRITE_OS( npTTYInfo ),

dwBytesWritten, TRUE )) {

dwError = GetLastError();

if(dwError == ERROR_IO_INCOMPLETE){// normal result if not finished

dwBytesSent += dwBytesWritten; continue; }

......................

//我使用了多線程技術,在輔助線程中監視串口,有數據到達時依靠事件驅動,讀入數據并向主線程報告(發送數據在主線程中,相對說來,下行命令的數據總是少得多);并且,WaitCommEvent()、ReadFile()、WriteFile()都使用了非阻塞通信技術,依靠重疊(overlapped)讀寫操作,讓串口讀寫操作在后臺運行。

vb.net 做的通信程序,設備掉電后出錯:無法從傳輸連接中讀取數據: 遠程主機強迫關閉了一個現有的連接

看下這個異常的類型 在捕捉異常的時候處理為關閉并重新打開端口監聽(這個看你自己需求) 然后在socketException下面再catch其它exception 進行彈出錯誤提示之類的操作 就可以了

VB.NET與PHP通訊問題

與語言沒有關系, 你需要考慮的是兩個系統直接如何通訊. 選一種通訊協議(一般用http協議), 設計好數據結構, 可以是xml或json. 假設選用http協議傳輸json數據. 你需要做以下工作:

使用php開發一個http接口, 根據參數查詢數據庫, 把結果轉換為json格式后返回. 這是目前最流行的接口格式, 基本上所有語言都可以開發和請求這樣的接口, 很多開放平臺都是這樣設計接口的, 例如微信的這個接口,你可以參考一下?網頁鏈接

使用VB.NET請求這個接口, 獲取返回的數據(json格式, 一個特殊的字符串), 使用VB.NET對json數據進行解碼

所以,要完成這個工作,你需要知道http接口開發和請求, 以及json編碼和解碼的相關知識和技能, 祝你好運

請教用VB.NET向網口發送16進制的數的方法.

很有意思。

原文數據全為:“00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ”

加密后變成了:“09 51 55 F4 FB 10 6F A4 D3 E8 87 46 F8 2F 49 CD ; ”

得出這樣的結果是有很多方法都可以實現的:

比如每個原數上加上個常數就可以了。

00+09=09;得出第一組加密后的數值

00+51=51;得出第二組加密后的數值

...

00+CD=CD;得出第16組加密后的數值.

加密的方法還有很多,不過這種最簡單。

還有就是你給的原文太單一了,不能夠更好的分析數據的規律。

如果你能把原文改為如下這段代碼再去加密一下,再把加密結果貼上來看一下就好多了。

00000140h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;

00000150h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;

00000160h: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ; 00000170h: 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 ;

00000180h: 11 11 11 11 11 22 22 22 22 22 22 EE EE EE FF FF ;

以上是單片機高手團為您解答。

如果還沒解決你的問題,可以加我百度HI賬號。


網頁標題:vb.net網口通訊6 vb網口通信
標題URL:http://www.xueling.net.cn/article/dodhpcs.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: h文纯肉教室啪啪 | 91视频青娱乐 | 天天碰天天操视频 | 最近手机中文字幕大全 | 手机在线观看国产 | 一二三四视频在线观看中文版免费 | 色婷婷久久一区二区爽爽爽 | 久久网站免费 | 亚洲日本成本人观看 | 久久综合99| 男人天堂视频在线 | 亚洲欧美日韩国产一区二区 | 国产黄色播放 | 久久久成人毛片无码 | 精品高潮呻吟久久av | 国产免费成人在线 | 亚洲熟女综合色一区二区三区 | xp123精品免费视频 | 亚洲熟妇AV一区二区三区宅男 | 午夜精品一区二区三区av | 欧美激情精品久久久久久久久久 | 99久久精品视频免费 | 无码精品国产一区二区三区免费 | 亚洲精品99久久久久久 | 久久久久久久久久久久久久久 | 精品伊人久久久久7777人 | 999av视频 | 亚洲欧美国内爽妇网 | 亚洲视频大全 | 中文字幕二区在线 | 国产免费无遮挡在线观看视频 | 亚洲成网站 | 香蕉视频网站在线观看 | 国产漂亮白嫩美女在线观看 | 国产XXXX做受视频 | 丰满极品饥渴少妇在线观看 | 亚洲AV网一区二区三区 | 又粗又大又硬毛片免费看 | 国产亚洲精品久久久久丝瓜 | av黄在线观免费网站 | 超碰人人爽 |