服务器创建:
package server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class ServerLocal {
public static void main(String[] args) throws Exception {
//在本机8000端口上启动服务
ServerSocket serverSocket = new ServerSocket(8000);
System.out.println("服务器已启动");
//等待客户端发送请求并建立连接通道
Socket serverSocket1 = serverSocket.accept();
System.out.println("客户端已连接");
//建立输入流
InputStream in = serverSocket1.getInputStream();
//建立输出流
OutputStream out = serverSocket1.getOutputStream();
//依次接收5个字符
for(int i=0;i<5;i++) {
char c = (char)in.read();
System.out.print(c);
}
//发送5个字符
out.write("world".getBytes());
out.flush();
serverSocket.close();
serverSocket1.close();
}
}
客户端创建:
package client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientLocal {
public static void main(String[] args) throws Exception {
//创建地址为127.0.0.1,端口为8000的套接字
Socket clientSocket = new Socket("127.0.0.1",8000);
//通过套接字获取输入流
InputStream in = clientSocket.getInputStream();
//通过套接字获取输出流
OutputStream out = clientSocket.getOutputStream();
//输出hello
out.write("hello".getBytes());
//刷出所有字符
out.flush();
for(int i=0;i<5;i++) {
//循环读取服务端发出的数据
char c =(char)in.read();
System.out.print(c);
}
//断开连接
clientSocket.close();
}
}
测试:
先启动服务器:
服务器已启动
再启动客户端:
客户端控制台输出:
world
服务器控制台输出:
服务器已启动
客户端已连接
hello
总结:
进行socket编程时,服务器端需要根据端口创建服务,然后通过accept()方法获取套接字并与客户端建立连接;客户端需要根据要连接的服务器ip和端口号创建套接字。通过套接字,我们可以获取输入输出流,通过输入输出流即可进行数据的交互。