winsock 發(fā)送圖片,就是發(fā)送文件嘛。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到雨山網(wǎng)站設(shè)計(jì)與雨山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋雨山地區(qū)。
不過(guò)UDP協(xié)議每次最多只能發(fā)送8K,所以你要先讀取文件,建立以個(gè)byte()數(shù)組 然后第一次發(fā)送是從數(shù)組的0-8100這個(gè)范圍,下次再發(fā)送的時(shí)候?qū)⒃購(gòu)?101開(kāi)始發(fā)送,長(zhǎng)度仍未8100就可以了。用一個(gè)while 循環(huán)來(lái)判斷文件有沒(méi)有發(fā)送完成就行了。對(duì)于接收端,在接收的時(shí)候也是要用一個(gè)循環(huán)來(lái)寫文件,前提是你必須先把要發(fā)送的文件的長(zhǎng)度告訴接收端。說(shuō)的夠詳細(xì)了吧!
'xiansr.2014/2/7 vb.net2010 調(diào)試通過(guò)
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim udpClient As New UdpClient(11000)
Try
udpClient.Connect("127.0.0.1", 11000)
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(RichTextBox1.Text)
udpClient.Send(sendBytes, sendBytes.Length)
Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
Dim receiveBytes As [Byte]() = udpClient.Receive(RemoteIpEndPoint)
Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)
RichTextBox2.Text = "接收到: " + returnData.ToString()
'Debug.Print(("This message was sent from " + RemoteIpEndPoint.Address.ToString() + " on their port number " + RemoteIpEndPoint.Port.ToString()))
udpClient.Close()
Catch ex As Exception
stop
End Try
End Sub
End Class
網(wǎng)上很多相關(guān)的現(xiàn)成的代碼
你需要知道的一點(diǎn)是數(shù)據(jù)接收不是接收一次就完了 接收端根本不知道數(shù)據(jù)什么時(shí)候要過(guò)來(lái) 所以數(shù)據(jù)端應(yīng)該一直重復(fù)著"等待-接收"的過(guò)程 于是就有了要在線程中接收數(shù)據(jù)的代碼
DatagramSocket用于接收和發(fā)送UDP的Socket實(shí)例。該類有3個(gè)構(gòu)造函數(shù):DatagramSocket():通常用于客戶端編程,它并沒(méi)有特定監(jiān)聽(tīng)的端口,僅僅使用一個(gè)臨時(shí)的。程序會(huì)讓操作系統(tǒng)分配一個(gè)可用的端口。DatagramSocket(int port):創(chuàng)建實(shí)例,并固定監(jiān)聽(tīng)Port端口的報(bào)文。通常用于服務(wù)端。
服務(wù)器先進(jìn)行
Bind ()綁定服務(wù)器的端口
然后BeginReceive接受客戶端發(fā)送的數(shù)據(jù)
客戶端Bind ()綁定客戶端接受和發(fā)送數(shù)據(jù)的端口
SendTo()來(lái)發(fā)送數(shù)據(jù)就可以
不需要進(jìn)行BeginConnect,因?yàn)閁DP不需要連接
當(dāng)觸發(fā)DataArrival事件后,從監(jiān)視里看到程序得到了正確的數(shù)據(jù)包長(zhǎng)度——144,
你的144是參數(shù)輸入的,跟 strdata的長(zhǎng)度,看不出來(lái)有關(guān)系呢。
但是用strdata讀出來(lái)就變成了72,
72是取的 strdata長(zhǎng)度,跟輸入的參數(shù) bytestotal,看不到有任何關(guān)系呢