TCP通讯协议特点:
1. tcp是基于IO流进行数据 的传输的,面向连接。
2. tcp进行数据传输的时候是没有大小限制的。
3. tcp是面向连接,通过三次握手的机制保证数据的完整性。可靠协议。
4. tcp是面向连接的,所以速度慢。
5. tcp是区分客户端与服务端的。
1. tcp是基于IO流进行数据 的传输的,面向连接。
2. tcp进行数据传输的时候是没有大小限制的。
3. tcp是面向连接,通过三次握手的机制保证数据的完整性。可靠协议。
4. tcp是面向连接的,所以速度慢。
5. tcp是区分客户端与服务端的。
tcp协议下的Socket:
Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
ServerSocket(服务端类)
tcp的客户端使用步骤:
1. 建立tcp的客户端服务。
2. 获取到对应的流对象。
3.写出或读取数据
4. 关闭资源。
1. 建立tcp的客户端服务。
2. 获取到对应的流对象。
3.写出或读取数据
4. 关闭资源。
import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; public class Demo1 { public static void main(String[] args) throws IOException { Socket socket = new Socket(InetAddress.getLocalHost(),9090); OutputStream a = socket.getOutputStream(); a.write("客户端说 :".getBytes()); socket.close(); } }
tcp的服务端使用步骤
java.net.BindException: 端口被占用。
java.net.BindException: 端口被占用。
ServerSocket的使用 步骤
1. 建立tcp服务端的服务。
2. 接受客户端的连接产生一个Socket.
3. 获取对应的流对象读取或者写出数据。
4. 关闭资源。
1. 建立tcp服务端的服务。
2. 接受客户端的连接产生一个Socket.
3. 获取对应的流对象读取或者写出数据。
4. 关闭资源。
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Demo2 { public static void main(String[] args) throws IOException { ServerSocket socket = new ServerSocket(9090); Socket s = socket.accept(); InputStream b = s.getInputStream(); byte[] buf = new byte[1024]; int length = 0; length = b.read(buf); System.out.println("服务端接收:"+ new String(buf,0,length)); OutputStream outputStream = s.getOutputStream(); outputStream.write("客户端你好啊!".getBytes()); socket.close(); } }
需求: 客户端与服务端一问一答聊天。
1.如果使用BuffrerdReader的readline方法一定要加上
才把数据写出。
2.使用字符流一定要调用flush方法数据才会写出。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; public class Demo4 { public static void main(String[] args) throws IOException { Socket socket = new Socket(InetAddress.getLocalHost(),9090); OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream()); BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line = keyReader.readLine())!=null){ socketOut.write(line+" "); socketOut.flush(); line = socketReader.readLine(); System.out.println("服务端回送的数据是:"+line); } socket.close(); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Demo5 { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(9090); Socket socket = serverSocket.accept(); BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream()); BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line = socketReader.readLine())!=null){ System.out.println("服务端接收到的数据:"+ line); System.out.println("输入发给客户端的数据:"); line = keyReader.readLine(); socketOut.write(line+" "); socketOut.flush(); } serverSocket.close(); } }
模拟Tomcat
import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Demo6 { public static void main(String[] args) throws IOException { ServerSocket serversocket = new ServerSocket(9090); Socket socket = serversocket.accept(); OutputStream outputStream= socket.getOutputStream(); outputStream.write("nihao".getBytes()); serversocket.close(); } }
运行服务器
查询本机ip
在浏览器输入IP和端口
因为没有标签所以浏览器不承认这是个网页
但是服务器已经停止
该段代码只可以被一个人访问,多线程可以让多人访问如下:
import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Demo6 extends Thread{ Socket socket; public Demo6(Socket socket) { // TODO Auto-generated constructor stub this.socket = socket; } public void run() { try { OutputStream outputStream= socket.getOutputStream(); outputStream.write("<html><head><title></title><body>小姐姐,么么哒!</body></head></html>".getBytes()); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) throws IOException { ServerSocket serversocket = new ServerSocket(9090); while(true) { Socket socket = serversocket.accept(); new Demo6(socket).start(); } } }