62,615
社区成员
发帖
与我相关
我的任务
分享
import java.net.*;
import java.io.*;
//服务器端程序
public class Server
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
byte [] b = new byte[1024];
int i = 0;
while(dis.readByte() != -1) {
b[i] = dis.readByte();
i++ ;
}
FileOutputStream fos = new FileOutputStream("c:/ClientData.txt");
fos.write(b);
fos.flush();
fos.close();
dis.close();
s.close();
}
}
//客户端程序
import java.net.*;
import java.io.*;
public class Client
{
public static final String fileName = "c:" + File.separator + "TestClient.java";
public static void main(String[] args) throws Exception
{
Socket s = new Socket("127.0.0.1",6666);
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
FileInputStream fis = new FileInputStream(fileName);
byte[] b = new byte[fis.available()];
int len = fis.read(b); //读取数据到数组b中,返回读到的字节数len
dos.write(b, 0, len-1);
dos.flush();
fis.close();
dos.close();
}
}
/*单独运行Server.java和Client.java都不会报错,说明socket编程是没有问题的,但当运行Server.java后再运行Client.java抛出如下错误:
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:250)
at Server.main(Server.java:15)
*/
package test;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Toyqsshr {
boolean started = false;
ServerSocket ss = null;
public static void main(String[] args) {
new Toyqsshr().start();
}
public void start() {
try {
ss = new ServerSocket(50000);
started = true;
} catch (BindException e) {
System.out.println("端口使用中....");
System.out.println("请关掉相关程序并重新运行服务器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
while (started) {
Socket s = ss.accept();
Save2File r = new Save2File(s);
System.out.println(s.getInetAddress().toString() + " connected!");
new Thread(r).start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (!ss.isClosed()) {
ss.close();
ss = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 保存到文件
*/
class Save2File implements Runnable {
private Socket s = null;
private DataInputStream dis = null;
private PrintWriter pw = null;
byte[] buffer = new byte[2000];
String fileName = "c:/clientData.txt";
public Save2File(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
pw = new PrintWriter(new BufferedWriter(new FileWriter(fileName, true/* 写入文件末尾 */)), true/* 自动刷新 */);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
while (true) {
int num = dis.read(buffer);
System.out.println("读取了" + num + "个字节");
for (int i = 0; i < num; i++) {
pw.printf("0x%02X ", buffer[i]);
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null) {
dis.close();
dis = null;
}
if (pw != null) {
pw.close();
pw = null;
}
if (!s.isClosed()) {
s.close();
s = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
FileOutputStream fos = new FileOutputStream("c:/ClientData.txt");
byte [] b = new byte[1024];
int i = 0;
while((i = dis.read(b)) != -1) {
fos.write(b);
}
// fos.write(b);
fos.flush();
fos.close();
dis.close();
s.close();
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("c:/ClientData.txt", true/*写入文件末尾*/)), true/*自动刷新*/);
while(dis.readByte() != -1) {
b[i] = dis.readByte();
i++ ;
}