最近用vb编写了一个小的模拟客户端 用于发送图片资源,用java写了一个小程序用于接收存储,但是每次接收的时候接收到的资源都是打不开,提示的是文件已经损坏,不知道怎么回事 求大神照顾解答。
下面是代码;
vb:
Option ExplicitPrivate 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 ExplicitPrivate 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 SubPrivate 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 SubPrivate Sub Form_Load()
    Command1.Caption = "连接"
    Command2.Caption = "显示图片"
End SubJAVA: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分送上

解决方案 »

  1.   

    '   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