用socket实现文件传输(socket编程实现文件传输)

      最后更新:2023-08-03 04:25

      socket编程:文件夹的传输

      没有别的方法了 传输文件夹只能先遍历文件夹,获取所有文件夹和文件信息 然后在本地建立文件夹,并逐个写文件

      socket编程:文件夹的传输

      用C语言实现socket文件传输?

      服务端代码: #include #include #include #include #include #include #include #include #define MYPORT 3490 /*定义用户连接端口*/#define BACKLOG 10 /*多少等待连接控制*/main(){int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd*/struct sockaddr_in my_addr; /* my address information */struct sockaddr_in their_addr; /* connector's address information */int sin_size;if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}my_addr.sin_family = AF_INET; /* host byte order */my_addr.sin_port = htons(MYPORT); /* short, network byte order */my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */bzero(&(my_addr.sin_zero),; /* zero the rest of the struct */if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(structsockaddr))== -1) {perror("bind");exit(1);}if (listen(sockfd, BACKLOG) == -1) {perror("listen");exit(1);}while(1) { /* main accept() loop */sin_size = sizeof(struct sockaddr_in);if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {perror("accept");continue;}printf("server: got connection from %sn", inet_ntoa(their_addr.sin_addr));if (!fork()) { /* this is the child process */if (send(new_fd, "Hello, world!n", 14, 0) == -1)perror("send");close(new_fd);exit(0);}close(new_fd); /* parent doesn't need this */while(waitpid(-1,NULL,WNOHANG) > 0); /* clean up child processes */}}客户代码:#include #include #include #include #include #include #include #include #define PORT 3490 /* 客户机连接远程主机的端口 */#define MAXDATASIZE 100 /* 每次可以接收的最大字节 */int main(int argc, char *argv[]){int sockfd, numbytes;char buf[MAXDATASIZE];struct hostent *he;struct sockaddr_in their_addr; /* connector's address information */if (argc != 2) {fprintf(stderr,"usage: client hostnamen");exit(1);}if ((he=gethostbyname(argv[1])) == NULL) { /* get the host info */herror("gethostbyname");exit(1);}if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}their_addr.sin_family = AF_INET; /* host byte order */their_addr.sin_port = htons(PORT); /* short, network byte order */their_addr.sin_addr = *((struct in_addr *)he->h_addr);bzero(&(their_addr.sin_zero),; /* zero the rest of the struct */if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(structsockaddr)) == -1) {perror("connect");exit(1);}if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {perror("recv");exit(1);}buf[numbytes] = '';printf("Received: %s",buf);close(sockfd);return 0; }
      socket + FILE灰常简单~! SOCKET 例子多如牛毛,FILE文件操作更是随处可见~!
      用C语言实现socket文件传输?

      iOS 中设备之间 socket 传文件应该怎么实现

      socket是比较底层的通讯方式,只是建立了一个连接通道,具体上面传输什么样的数据,按照什么格式传输,需要你自己定义。换句话说,你需要自己定义一个文件传输协议。例如,要定义数据包的大小,要定义每个数据包的格式,定义纠错机制,网络中断后如何恢复等等。大文件要拆分成数据包来传输,接收方要把收到的数据包再组装起来。文件名这些信息也做为原始数据的一部分通过数据包传过去,只不过跟文件内容的数据包类型不一样而已。 但是,实现这样一个传输协议是比较麻烦和容易出错的,象传文件这种逻辑比较简单的操作一般没必要在socket层直接操作。iOS提供了CFStream接口,适合文件这种数据流的传输。iOS本身的FTP和HTTP协议栈的实现也是使用CFStream API,而不是直接操作socket的。
      sock_stream 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送。 sock_dgram 是无保障的面向消息的socket , 主要用于在网络上发广播信息。 SOCK_STREAM是基于TCP的,数据传输比较有保障。SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播 SOCK_STREAM 是数据流,一般是tcp/ip协议的编程,SOCK_DGRAM分是数据抱,是udp协议网络编程 解释一下: 关于UDP 1、UDP协议适用端口分辨运行在同一台设备上的多个应用程序,UDP有不提供数据报分组、组装和不能对数据包进行排序的缺点。 也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 2、在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。 3、但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。 关于TCP 1、TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。 2、TCP特性: (1)面向连接的传输; (2)端到端的通信; (3)高可靠性,确保传输数据的正确性,不出现丢失或乱序; (4)全双工方式传输; (5)采用字节流方式,即以字节为单位传输字节序列; (6)紧急数据传送功能。 所以如果你需要传输的数据是准确的,建议采用TCP,也就是sock_stream 如果你传输的是视频音频等数据,丢几个包也无所谓的,可以采用UDP,也就是sock_dgram
      iOS 中设备之间 socket 传文件应该怎么实现

      linux 下用socket 文件传输问题(UDP)

      要下班了,时间急,不写代码了先给你一个思路 1 实现最简单的udp socket 模型,实现发送一个字符串。2 实现一个侍运橡简单的打开文件,读取文件的例子,如用fgets(),类似的函数有很多,然后再把读取的文件内容忘另一个文件里写(相关函数fopen(),write(),read())。3 把上面两个函数结合到一起,在客户端实现打开要传送的文件,按一定的大小读取,读取后调用sendto()发送到服务器端。在服务器端创建一个文件,然后调用recvfrom()接受客户端发送过来的数据,向来是创建的那个文件中写。下面是改好的udp发送文件的例子。 服务器端程序的编译gcc -o file_server  file_server客户端程序的编译gcc -o file_client  file_client.c服务器程序和客户端程应当分别运行在2台计算机上.服务器端程序的运行,在一个计算机的终端执行./file_server客户端程序的运行,在另一个计算机的终端中执行./file_client  运行服务器程序的计算机的IP地址根据提示输入要传输的服务器上的文件,该文件在服务器的运行目录上在实际编程和测试中,可以用2个终端代替2个计算机,这样就可以在一台计算机上测试网络程序,服务器端程序的运行,在一个终端执行./file_server客户端程序的运行,在另一个终端中执行./file_client  127.0.0.1说明: 任何计算机都可以通过127.0.0.1访问自己. 也可以用计算机的实际IP地址代替127.0.0.1//////////////////////////////////////////////////////////////////////////////////////// file_server.c  文件传输顺序服务器示例////////////////////////////////////////////////////////////////////////////////////////本文件是服务器的代码#include     // for sockaddr_in#include     // for socket#include     // for socket#include         // for printf#include         // for exit#include         // for bzero/*#include #include #include #include */#define HELLO_WORLD_SERVER_PORT    6666#define LENGTH_OF_LISTEN_QUEUE  20#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512 int main(int argc, char **argv){//设置一个socket地址老旁结构server_addr,代表服务器internet地址, 端口struct sockaddr_in server_addr, pcliaddr;bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htons(INADDR_ANY);server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT); //创建用于internet的据报套接字(UDPt,用server_socket代表服务器socket // 创建数据报套接悄碧字(UDP)int server_socket = socket(PF_INET,SOCK_DGRAM,0);if( server_socket < 0){printf("Create Socket Failed!");exit(1);} //把socket和socket地址结构联系起来if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))){printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);exit(1);} while (1) //服务器端要一直运行{//定义客户端的socket地址结构client_addrstruct sockaddr_in client_addr;socklen_t n = sizeof(client_addr) ;int length; char buffer[BUFFER_SIZE];bzero(buffer, BUFFER_SIZE);length = recvfrom(new_server_socket,buffer,BUFFER_SIZE,0,&pcliaddr,&n);if (length < 0){printf("Server Recieve Data Failed!n");break;}char file_name[FILE_NAME_MAX_SIZE+1];bzero(file_name, FILE_NAME_MAX_SIZE+1);strncpy(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer));//        int fp = open(file_name, O_RDONLY);//        if( fp < 0 )FILE * fp = fopen(file_name,"r");if(NULL == fp ){printf("File:t%s Not Foundn", file_name);}else{bzero(buffer, BUFFER_SIZE);int file_block_length = 0;//            while( (file_block_length = read(fp,buffer,BUFFER_SIZE))>0)while( (file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0){printf("file_block_length = %dn",file_block_length);//发送buffer中的字符串到new_server_socket,实际是给客户端if(send(new_server_socket,buffer,file_block_length,0)<0){printf("Send File:t%s Failedn", file_name);break;}bzero(buffer, BUFFER_SIZE);}//            close(fp);fclose(fp);printf("File:t%s Transfer Finishedn",file_name);}}} //////////////////////////////////////////////////////////////////////////////////////// file_client.c  文件传输客户端程序示例////////////////////////////////////////////////////////////////////////////////////////本文件是客户机的代码#include     // for sockaddr_in#include     // for socket#include     // for socket#include         // for printf#include         // for exit#include         // for bzero/*#include #include #include #include */ #define HELLO_WORLD_SERVER_PORT    6666#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512 int main(int argc, char **argv){if (argc != 2){printf("Usage: ./%s ServerIPAddressn",argv[0]);exit(1);} //设置一个socket地址结构client_addr,代表客户机internet地址, 端口struct sockaddr_in client_addr;bzero(&client_addr,sizeof(client_addr)); //把一段内存区的内容全部设置为0client_addr.sin_family = AF_INET;    //internet协议族client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址client_addr.sin_port = htons(0);    //0表示让系统自动分配一个空闲端口//创建用于internet的流协议(TCP)socket,用client_socket代表客户机socketint client_socket = socket(AF_INET,SOCK_DGRAM,0);if( client_socket < 0){printf("Create Socket Failed!n");exit(1);} //设置一个socket地址结构server_addr,代表服务器的internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family = AF_INET;if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //服务器的IP地址来自程序的参数{printf("Server IP Address Error!n");exit(1);}server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);socklen_t server_addr_length = sizeof(server_addr); char file_name[FILE_NAME_MAX_SIZE+1];bzero(file_name, FILE_NAME_MAX_SIZE+1);printf("Please Input File Name On Server:t");scanf("%s", file_name); char buffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));//向服务器发送buffer中的数据socklen_t n = sizeof(server_addr) ;sendto(client_socket,buffer,BUFFER_SIZE,0,(struct sockaddr*)&server_addr,n); //    int fp = open(file_name, O_WRONLY|O_CREAT);//    if( fp < 0 )FILE * fp = fopen(file_name,"w");if(NULL == fp ){printf("File:t%s Can Not Open To Writen", file_name);exit(1);} //从服务器接收数据到buffer中bzero(buffer,BUFFER_SIZE);int length = 0;while( length = recv(client_socket,buffer,BUFFER_SIZE,0)){if(length < 0){printf("Recieve Data From Server %s Failed!n", argv[1]);break;}//        int write_length = write(fp, buffer,length);int write_length = fwrite(buffer,sizeof(char),length,fp);if (write_length服务器端程序的编译 gcc -o file_serverfile_server客户端程序的编译gcc -o file_clientfile_client.c服务器程序和客户端程应当分别运行在2台计算机上.服务器端程序的运行,在一个计算机的终端执行./file_server客户端程序的运行,在另一个计算机的终端中执行./file_client运行服务器程序的计算机的IP地址根据提示输入要传输的服务器上的文件,该文件在服务器的运行目录上在实际编程和测试中,可以用2个终端代替2个计算机,这样就可以在一台计算机上测试网络程序,服务器端程序的运行,在一个终端执行./file_server客户端程序的运行,在另一个终端中执行./file_client127.0.0.1说明: 任何计算机都可以通过127.0.0.1访问自己. 也可以用计算机的实姿派际IP地址代替127.0.0.1//////////////////////////////////////////////族野////////////////////////////////////////// file_server.c文件传输顺序服务器示例////////////////////////////////////////////////////////////////////////////////////////本文件是服务器的代码#include // for sockaddr_in#include // for socket#include // for socket#include // for printf#include // for exit#include // for bzero/*#include #include #include #include */#define HELLO_WORLD_SERVER_PORT6666#define LENGTH_OF_LISTEN_QUEUE20#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512 int main(int argc, char **argv){//设置一个socket地址结构server_addr,代表服务器internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htons(INADDR_ANY);server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT); //创建用于internet的流协议(TCP)socket,用server_socket代表服务器socketint server_socket = socket(PF_INET,SOCK_STREAM,0);if( server_socket < 0){printf("Create Socket Failed!");exit(1);} //把socket和socket地址结构联系起来if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))){printf("迹穗贺Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);exit(1);} //server_socket用于监听if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ){printf("Server Listen Failed!");exit(1);}while (1) //服务器端要一直运行{//定义客户端的socket地址结构client_addrstruct sockaddr_in client_addr;socklen_t length = sizeof(client_addr); //接受一个到server_socket代表的socket的一个连接//如果没有连接请求,就等待到有连接请求--这是accept函数的特性//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信//new_server_socket代表了服务器和客户端之间的一个通信通道//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);if ( new_server_socket < 0){printf("Server Accept Failed!n");break;} char buffer[BUFFER_SIZE];bzero(buffer, BUFFER_SIZE);length = recv(new_server_socket,buffer,BUFFER_SIZE,0);if (length < 0){printf("Server Recieve Data Failed!n");break;}char file_name[FILE_NAME_MAX_SIZE+1];bzero(file_name, FILE_NAME_MAX_SIZE+1);strncpy(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer));//int fp = open(file_name, O_RDONLY);//if( fp < 0 )FILE * fp = fopen(file_name,"r");if(NULL == fp ){printf("File:t%s Not Foundn", file_name);}else{bzero(buffer, BUFFER_SIZE);int file_block_length = 0;//while( (file_block_length = read(fp,buffer,BUFFER_SIZE))>0)while( (file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0){printf("file_block_length = %dn",file_block_length);//发送buffer中的字符串到new_server_socket,实际是给客户端if(send(new_server_socket,buffer,file_block_length,0)<0){printf("Send File:t%s Failedn", file_name);break;}bzero(buffer, BUFFER_SIZE);}//close(fp);fclose(fp);printf("File:t%s Transfer Finishedn",file_name);}//关闭与客户端的连接close(new_server_socket);}//关闭监听用的socketclose(server_socket);return 0;} //////////////////////////////////////////////////////////////////////////////////////// file_client.c文件传输客户端程序示例////////////////////////////////////////////////////////////////////////////////////////本文件是客户机的代码#include // for sockaddr_in#include // for socket#include // for socket#include // for printf#include // for exit#include // for bzero/*#include #include #include #include */ #define HELLO_WORLD_SERVER_PORT6666#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512 int main(int argc, char **argv){if (argc != 2){printf("Usage: ./%s ServerIPAddressn",argv[0]);exit(1);} //设置一个socket地址结构client_addr,代表客户机internet地址, 端口struct sockaddr_in client_addr;bzero(&client_addr,sizeof(client_addr)); //把一段内存区的内容全部设置为0client_addr.sin_family = AF_INET;//internet协议族client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址client_addr.sin_port = htons(0);//0表示让系统自动分配一个空闲端口//创建用于internet的流协议(TCP)socket,用client_socket代表客户机socketint client_socket = socket(AF_INET,SOCK_STREAM,0);if( client_socket < 0){printf("Create Socket Failed!n");exit(1);}//把客户机的socket和客户机的socket地址结构联系起来if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr))){printf("Client Bind Port Failed!n");exit(1);} //设置一个socket地址结构server_addr,代表服务器的internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family = AF_INET;if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //服务器的IP地址来自程序的参数{printf("Server IP Address Error!n");exit(1);}server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);socklen_t server_addr_length = sizeof(server_addr);//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0){printf("Can Not Connect To %s!n",argv[1]);exit(1);} char file_name[FILE_NAME_MAX_SIZE+1];bzero(file_name, FILE_NAME_MAX_SIZE+1);printf("Please Input File Name On Server:t");scanf("%s", file_name); char buffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));//向服务器发送buffer中的数据send(client_socket,buffer,BUFFER_SIZE,0); //int fp = open(file_name, O_WRONLY|O_CREAT);//if( fp < 0 )FILE * fp = fopen(file_name,"w");if(NULL == fp ){printf("File:t%s Can Not Open To Writen", file_name);exit(1);} //从服务器接收数据到buffer中bzero(buffer,BUFFER_SIZE);int length = 0;while( length = recv(client_socket,buffer,BUFFER_SIZE,0)){if(length < 0){printf("Recieve Data From Server %s Failed!n", argv[1]);break;}//int write_length = write(fp, buffer,length);int write_length = fwrite(buffer,sizeof(char),length,fp);if (write_length你传输文本的时候用的什么函数阿?send/recv?还是sendto/recvfrom?或者直接read/write? 文纳前件不是一样的?只不过需要自己拟定一如芦个协议,比如先发送文件大小,然后把文件打开了往里放不就好了,没有难度洞橡清吧
      linux 下用socket  文件传输问题(UDP)

      基于Java Socket实现文件传输

      import java.io.*; import java.net.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Client1 extends JFrame{private JTextField enter,Iptext;private JTextArea display;private JLabel Iplabel;private JPanel upPanel;JButton clientMessageButton,connectButton,DisConnectButton;ObjectOutputStream output;ObjectInputStream input;Socket socket1;String message=" ";public Client1(){super("客户端");Container c=getContentPane();clientMessageButton=new JButton("发送");c.add(clientMessageButton,BorderLayout.EAST);clientMessageButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){sendData(enter.getText());
      }});DisConnectButton=new JButton("断开连接");DisConnectButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){DisConnect();
      }});Iptext=new JTextField(10);Iptext.setText("");Iptext.setEnabled(true);Iptext.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){connect();
      }});Iplabel=new JLabel("服务器IP:");connectButton=new JButton("连接");connectButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){connect();
      }});upPanel=new JPanel();upPanel.add(connectButton);upPanel.add(DisConnectButton);upPanel.add(Iplabel);upPanel.add(Iptext);enter=new JTextField();enter.setEnabled(true);enter.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){sendData(enter.getText());
      }});c.add(enter,BorderLayout.SOUTH);c.add(upPanel,BorderLayout.NORTH);display=new JTextArea();c.add(new JScrollPane(display),BorderLayout.CENTER);setSize(300,450);show();}public void connect(){try{display.setText("准备连接...n");String s=Iptext.getText();socket1=new Socket(InetAddress.getByName(s),8888);display.append("连接到: "+socket1.getInetAddress().getHostName());display.append("n主机IP为:"+socket1.getInetAddress().toString());output=new ObjectOutputStream(socket1.getOutputStream());output.flush();do{try{message=(String)input.readObject();display.append("n"+message);}catch(IOException e){display.append("n无法获得信息");}catch(ClassNotFoundException e){}}while(!message.equals("end"));display.append("n关闭连接");output.close();input.close();socket1.close();}catch(EOFException eof){System.out.println(eof);}catch(IOException e){e.printStackTrace();}}public void DisConnect(){try{display.append("n关闭连接");output.close();input.close();socket1.close();}catch(Exception e){}}private void sendData(String s){try{message=s;output.writeObject("客户消息: "+s);display.append("n客户:"+s);output.flush();enter.setText(" ");}catch(Exception e){display.append("n发生错误");}}public static void main(String args[])//throws NullPointerException{Client1 app=new Client1();app.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//app.connect();}}//服务端2007-12-30 17:33import java.io.*;import java.net.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class Server1 extends JFrame{private JTextArea display;private JTextField enter;JButton sysMessageButton;JButton stopMessageButton,startServerButton;JPanel upPanel;ServerSocket server;Socket socket1;ObjectOutputStream output;ObjectInputStream input;public Server1(){super("服务器端");Container c=getContentPane();enter=new JTextField();setSize(50,20);upPanel=new JPanel();sysMessageButton=new JButton("发送");c.add(sysMessageButton,BorderLayout.EAST);setSize(50,20);stopMessageButton=new JButton("断开连接");c.add(stopMessageButton,BorderLayout.WEST);stopMessageButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){ stopService();}});
      基于Java Socket实现文件传输

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类