最近用vb撰寫了一個小的模擬客戶端 用于發送圖片資源,用java寫了一個小程式用于接收存盤,但是每次接收的時候接收到的資源都是打不開,提示的是檔案已經損壞,不知道怎么回事 求大神照顧解答。
下面是代碼;
vb:
Option Explicit
Private Sub Form_Load()
Winsock1(0).Protocol = sckTCPProtocol '使用TCP協議
Winsock1(0).LocalPort = 9999 '設定本地埠
Winsock1(0).RemotePort = 0 '設定要連接的遠程埠號
Winsock1(0).Listen '設定為偵聽模式
End Sub
'接受連接
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim PBag As New PropertyBag '得到圖片資訊
Dim PictureByt() As Byte '保存影像
Load Winsock1(Winsock1.Count)
Winsock1(Winsock1.Count - 1).Accept requestID '接受新連接
'---------------------------------------------------------------
PBag.WriteProperty "Picture", Picture1.Picture
PictureByt = PBag.Contents '獲取容器Byte到PictureByt()陣列中
'---------------------------------------------------------------
Winsock1(Winsock1.Count - 1).SendData PictureByt '發送資料
End Sub
'==========================================================
表單Client,需要控制元件:Command1,Command2,Picture1,Winsock1 。全部是默認屬性
Option Explicit
Private Sub Command1_Click()
Winsock1.Close '關閉連接
Winsock1.Protocol = sckTCPProtocol '使用TCP協議
Winsock1.LocalPort = 0 '動態地建立連接
Winsock1.RemotePort = 9999 '設定要連接的遠程埠號
Winsock1.Connect "192.168.1.124" '設定要連接的計算機名稱或IP地址
'IP改成要連接的IP
Command1.Enabled = False
End Sub
Private Sub Command2_Click()
Dim bytData() As Byte '接收圖片
Dim PBag As New PropertyBag '圖片資訊
ReDim bytData(1 To Winsock1.BytesReceived) '接收圖片大小
Winsock1.GetData bytData '讀取緩沖區資料
PBag.Contents = bytData
Set Picture1.Picture = PBag.ReadProperty("Picture") '設定圖片
Command2.Enabled = False
End Sub
Private Sub Form_Load()
Command1.Caption = "連接"
Command2.Caption = "顯示圖片"
End Sub
JAVA:
package com.yang.pic_send;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class pic_sendDemo {
public static void main(String[] args) throws Exception {
Socket soc =new Socket("10.150.89.203",2000);
File f= new File("e:"+File.separator+"yang"+File.separator+"pic_get.jpg");
InputStream input = soc.getInputStream();
OutputStream out = new FileOutputStream(f);
byte get[]=new byte[4000000];
int temp=0;
int len=0;
System.out.println("正在接收....");
/*while((temp=input.read())!=-1){
System.out.print(">>>");
get[len]=(byte) temp;
len++;
}*/
len=input.read(get);
System.out.print(len);
out.write(get,0,len);
System.out.print("接收完畢");
input.close();
soc.close();
System.out.print("接收完畢");
// TODO 自動生成的方法存根
}
}
不知道是協議什么錯了還是怎么了 請各位幫我解答 50分送上
uj5u.com熱心網友回復:
我有做過這個,

uj5u.com熱心網友回復:
' log每個收到的位元組
i = 0
lnx = "-->BYTE:" + Right("0000000" + Hex(i), 8) + "-"
For i = 0 To bytesTotal - 1
lnx = lnx + " " + Right("0" + Hex(iBuf(i)), 2)
If i Mod 16 = 15 Then
LogRX lnx
lnx = "-->BYTE:" + Right("0000000" + Hex(i + 1), 8) + "-"
End If
Next
i = bytesTotal - 1
If i Mod 16 <> 15 Then
LogRX lnx
End If
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/127687.html
標籤:網絡編程
下一篇:【求助】文本框中的資料賦給問題
