客户端发送
package myNetworkDemo;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//public OutputStream getOutputStream(); 返回此套接字的输出流
OutputStream os = s.getOutputStream();
os.write("hello world...".getBytes());
//释放资源
s.close();
}
}
服务器端接收
package myNetworkDemo;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//public InputStream getInputStream(); 返回此套接字的输入流
InputStream is = s.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String data = new String(bytes, 0, len);
System.out.println("数据是: " + data);
s.close();
ss.close();
}
}
练习
1.服务器端给出反馈
package myNetworkDemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//public OutputStream getOutputStream(); 返回此套接字的输出流
OutputStream os = s.getOutputStream();
os.write("hello world...".getBytes());
//接收服务器段反馈
InputStream is = s.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String data = new String(bytes, 0, len);
System.out.println("客户端:" + data);
//释放资源
s.close();
}
}
package myNetworkDemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//public InputStream getInputStream(); 返回此套接字的输入流
InputStream is = s.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String data = new String(bytes, 0, len);
System.out.println("服务器: " + data);
//输出反馈
OutputStream os = s.getOutputStream();
os.write("数据已经收到".getBytes());
s.close();
ss.close();
}
}
2.客户端数据来自于键盘输入
package myNetworkDemo;
import java.io.*;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//数据来源于键盘录入
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
//封装输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
if ("886".equals(line)) {
break;
}
//获取输出流对象
// OutputStream os = s.getOutputStream();
// os.write(line.getBytes());
bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
s.close();
}
}
package myNetworkDemo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//public InputStream getInputStream(); 返回此套接字的输入流
// InputStream is = s.getInputStream();
// InputStreamReader isr = new InputStreamReader(is);
// BufferedReader br = new BufferedReader(isr);
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
ss.close();
}
}
3.服务器数据写入文本文件
package myNetworkDemo;
import java.io.*;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//数据来源于键盘录入
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
//封装输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
if ("886".equals(line)) {
break;
}
//获取输出流对象
// OutputStream os = s.getOutputStream();
// os.write(line.getBytes());
bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
s.close();
}
}
package myNetworkDemo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//接收数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//把数据写入文本文件
BufferedWriter bw = new BufferedWriter(new FileWriter("Test\\s.txt"));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
ss.close();
}
}
4.客户端数据来自文本文件
package myNetworkDemo;
import java.io.*;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//封装文本文件的数据
BufferedReader br =new BufferedReader(new FileReader("Test\\s.txt"));
//封装输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
br.close();
s.close();
}
}
package myNetworkDemo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//接收数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//把数据写入文本文件
BufferedWriter bw = new BufferedWriter(new FileWriter("Test\\Copy.txt"));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
ss.close();
}
}
5.上传文件服务器给出反馈
package myNetworkDemo;
import java.io.*;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//封装文本文件的数据
BufferedReader br =new BufferedReader(new FileReader("Test\\s.txt"));
//封装输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//自定义结束标记
// bw.write("886");
// bw.newLine();
// bw.flush();
//public void shutdownOutput(); 禁用此套接字的输出流
s.shutdownOutput();
//接收反馈
BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brClient.readLine();
System.out.println("服务器的反馈:" + data);
//释放资源
br.close();
s.close();
}
}
package myNetworkDemo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//接收数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//把数据写入文本文件
BufferedWriter bw = new BufferedWriter(new FileWriter("Test\\Copy.txt"));
String line;
while ((line = br.readLine()) != null) {
// if ("886".equals(line)) {
// break;
// }
bw.write(line);
bw.newLine();
bw.flush();
}
//给出反馈
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bwServer.write("文件上次成功");
bwServer.newLine();
bwServer.flush();
//释放资源
bw.close();
ss.close();
}
}
6.多线程实现文件上传
package myNetworkDemo;
import java.io.*;
import java.net.Socket;
public class TCPClientDemo {
public static void main(String[] args) throws IOException {
//public Socket(String host, int port); 创建流套接字并将其连接到指定主机上的指定端口号
Socket s = new Socket("192.168.61.1", 10000);
//封装文本文件的数据
BufferedReader br =new BufferedReader(new FileReader("Test\\s.txt"));
//封装输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//public void shutdownOutput(); 禁用此套接字的输出流
s.shutdownOutput();
//接收反馈
BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brClient.readLine();
System.out.println("服务器的反馈:" + data);
//释放资源
br.close();
s.close();
}
}
package myNetworkDemo;
import java.io.*;
import java.net.Socket;
public class ServerThread implements Runnable {
private Socket s;
public ServerThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
//接收数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//把数据写入文本文件
int count = 0;
File file = new File("Test\\Copy[" + count + "].txt");
while (file.exists()) {
count++;
file = new File("Test\\Copy[" + count + "].txt");
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//给出反馈
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bwServer.write("文件上次成功");
bwServer.newLine();
bwServer.flush();
//释放资源
bw.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package myNetworkDemo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
//public ServerSocket(int port); 创建服务器端的Socket对象
ServerSocket ss = new ServerSocket(10000);
while (true) {
//public Socket accept(); 监听要连接到此套接字的连接并接受它
Socket s = ss.accept();
//为每一个客户端开启一个线程
new Thread(new ServerThread(s)).start();
}
}
}