Socket是网络编程的一个抽象概念,表示用一个Socket打开了一个网络链接,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定相应的协议类型即可。
大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了
/*
*1、这里是客户端,用的类是Socket实现
*2、和服务器实现数据交换
*3、使用的方法:
*Socket(String host,int port)
*构造方法只要运行,就会与服务器进行连接,连接失败就抛异常
*OutputStream 输出流,将数据传到服务器
*InputStream 输入流,从服务器读取数据
*不用new出来,直接从Socket获得流对象,创建连接时就已经有了
* */
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//创建Socket对象
Socket socket=new Socket("127.0.0.1", 6666);
//通过套接字方法,获取字节输出流,将数据写向服务器
OutputStream outputStream=socket.getOutputStream();
outputStream.write("服务器ok".getBytes());
InputStream inputStream=socket.getInputStream();
byte[]data=new byte[1024];
int len=inputStream.read(data);
System.out.println(new String(data,0,len));
socket.close();
}
}
*
* 1、这里是服务器,使用的类是ServerSocket
* 2、构造方法:ServerSocket(int port)
* 3、服务器里面没有获取流的方法,服务器端需要获取客户端的套接字对象
* accept(),获取客户端的套接字。服务器也需要获取一份
* */
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(6666);
//调用客户端套接字中的对象accept()获取客户端套接字对象
Socket socket=serverSocket.accept();
//获取字节输入流
InputStream inputStream=socket.getInputStream();
byte[]data=new byte[1024];
int len=inputStream.read(data);
System.out.println(new String(data,0,len));
//服务器想客户端回数据,字节输出流
OutputStream out=socket.getOutputStream();
out.write("已收到,谢谢!".getBytes());
socket.close();
serverSocket.close();
}
}