用法
先说怎么用吧,先开服务端,再开客户端,否则的话客户端会报错,因为无法连上服务端
原理
两者通过监听端口来进行交互,客户端如何传输数据过去,如何获得服务端返回的数据都说的很清楚了,服务端如何获取客户端的数据如何给客户端返回数据都已经集成的很清楚,自己看代码注释就可以了
代码
下面是两个java文件,直接粘下来,然后找环境运行就可以了
服务端
package uuid;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class SocketClient {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
// 1: 创建一个基于TCP协议的socket服务,在建立对象时,要指定连接服务器和端口号
Socket sc = new Socket("localhost", 9999);
// 2: 通过建立的Socket对象获取Socket中的输出流,调用getOutStream方法
OutputStream out = sc.getOutputStream();
System.out.println("请输入要转化的字母:");
String initData = input.next();//获取控制台的输入
// 3: 写入到Socket输出流中
out.write(initData.getBytes());
System.out.println("等待服务器端返回数据");
// 4: 通过建立的Socket对象获取Socket中的输入流,输入流会接受来自服务器端数据
InputStream in = sc.getInputStream();
byte[] b = new byte[1024];
// 5: 获取输入字节流的数据,注意此方法是堵塞的,如果没有获取数据会一直等待
int len = in.read(b);
System.out.println("返回的结果为:" + new String(b, 0, len));
// 关闭Socket
out.close();
in.close();
sc.close();
input.close();
}
}
客户端
package uuid;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) throws Exception {
// 1:建立服务器端的tcp socket服务,必须监听一个端口
ServerSocket ss = new ServerSocket(9999);
while(true) {
System.out.println("等待客户端请求……");
// 2: 通过服务器端的socket对象的accept方法获取连接上的客户端对象,没有则堵塞,等待
Socket socket = ss.accept();
System.out.println("握手成功……");
// 3: 通过输入流获取数据
InputStream input = socket.getInputStream();
byte[] b = new byte[1024];
int len = input.read(b);
String data = new String(b, 0, len);
System.out.println("客户端数据为:" + data);
// 4: 通过服务器端Socket输出流,写数据,会传送到客户端Socket输入流中
OutputStream out = socket.getOutputStream();
out.write(data.toUpperCase().getBytes());
// 5: 关闭socket
out.close();
input.close();
socket.close();
}
}
}