package cn.test.socket
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*
客户端建立思路:
1,建立客户端的socket服务。并明确要连接的服务端。
因为只有建立了连接,才可以进行通讯。
Socket s = new Socket(String IP, int port) 参数:主机名(可以用主机iP地址的文本表达形式代替)和端口
2,如果连接建立成功,就表明,已经了数据传输的通道。就可以在该通道通过IO进行数据的读取和写入。
该通道称为socket流,socket流中既有读取流,也有写入流。
3,通过socket对象的方法。可以获取这两个流对象。
getInputStream() getOutputStream()
4,通过流对象就可以对数据进行传输。
5,如果传输数据完毕,关闭资源。
*/
/*
建立服务端的思路:
1,建立服务端的socket服务。分配一个端口,用于监听该端口收到的数据。
ServerSocket ss = new ServerSocket(int port) 参数:端口
2,服务端没有直接流的操作,而是通过accept方法获取客户端对象,
在通过获取到的客户端对象的流和客户端进行通讯。
Socket accept()
3,通过客户端的获取流对象的方法,读取数据或者写入数据。
getInputStream() getOutputStream()
4,如果服务完成,需要关闭客户端,然后关闭服务端。
但是一般会关闭客户端,不关闭服务端,因为服务端是一值提供服务的。
*/
public class Client {
public static void main(String[] args) throws IOException {
// 创建客户端Socket, 连接指定服务端IP地址, 端口号; Socket类是实现客户端套接字
Socket socket = new Socket("192.168.1.100", 9999);
// 获取客户端输入输出流. 输入流可以读取服务端输出的数据, 输出流可以向服务端写出数据.
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// 接收数据. 将数据读取到buf中, len记住读取了多少个
byte[] buf = new byte[1024];
int len = in.read(buf); // 阻塞
String msg = new String(buf, 0, len);
System.out.println(msg);
// 发送数据
out.write("我是客户端".getBytes());
// 释放资源
socket.close();
}
}
package cn.test.socket
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
客户端建立思路:
1,建立客户端的socket服务。并明确要连接的服务端。
因为只有建立了连接,才可以进行通讯。
Socket s = new Socket(String IP, int port) 参数:主机名(可以用主机iP地址的文本表达形式代替)和端口
2,如果连接建立成功,就表明,已经了数据传输的通道。就可以在该通道通过IO进行数据的读取和写入。
该通道称为socket流,socket流中既有读取流,也有写入流。
3,通过socket对象的方法。可以获取这两个流对象。
getInputStream() getOutputStream()
4,通过流对象就可以对数据进行传输。
5,如果传输数据完毕,关闭资源。
*/
/*
建立服务端的思路:
1,建立服务端的socket服务。分配一个端口,用于监听该端口收到的数据。
ServerSocket ss = new ServerSocket(int port) 参数:端口
2,服务端没有直接流的操作,而是通过accept方法获取客户端对象,
在通过获取到的客户端对象的流和客户端进行通讯。
Socket accept()
3,通过客户端的获取流对象的方法,读取数据或者写入数据。
getInputStream() getOutputStream()
4,如果服务完成,需要关闭客户端,然后关闭服务端。
但是一般会关闭客户端,不关闭服务端,因为服务端是一值提供服务的。
*/
public class Server {
public static void main(String[] args) throws IOException {
// 创建服务端ServerSocket, 指定端口; ServerSocket类是实现服务器套接字
ServerSocket serverSocket = new ServerSocket(9999);
// 接收客户端请求, 在未接收到任何请求时会阻塞. 接收到之后会得到一个Socket对象
Socket socket = serverSocket.accept();
// 获取服务端输入输出流. 输入流可以读取客户端输出数据, 输出流可以向客户端写出数据.
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// 发送数据
out.write("你好, 你是谁啊?".getBytes());
// 接收数据
byte[] buf = new byte[1024];
int len = in.read(buf); // 阻塞
String msg = new String(buf, 0, len);
System.out.println(msg);
// 释放资源
socket.close();
serverSocket.close();
}
}
上面是通过代码的方式对网络编程中的TCP编程的总结。