Java——TCP的简单传输过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoweiccc/article/details/83041094

TCP协议:面向连接(三次握手),数据安全,速度比UDP略低,分为客户端和服务端
                  客户端先向服务端发起请求,服务端响应请求,传输数据
         客户端:创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应得服务器
                调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
                输入流可以读取服务端输出流写出的数据
                输出流可以写出数据到服务端的输入流
         服务端:创建ServerSocket(需要指定端口号)
                调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
                调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
                输入流可以读取客户端输出流写出的数据
                输出流可以写出数据到客户端的输入流

客户端代码

package pra_24;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class J_45 {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws Exception {
		//客户端
		/*
		 客户端初始版
		Socket s1=new  Socket("127.0.0.1", 12345);
		InputStream is=s1.getInputStream();		//获取客户端输入流
		OutputStream os=s1.getOutputStream();	//获取客户端输出流
		byte[] arr=new byte[1024];
		int len=is.read(arr);					//读取服务器发过来的数据
		System.out.println(new String(arr,0,len)); 		//将数据转换成字符串并打印
		os.write("qwert".getBytes());			//客户端向服务器写数据
		s1.close();
		*/
		//客户端优化版
		Socket s1=new  Socket("127.0.0.1", 12345);
		BufferedReader br=new BufferedReader(new InputStreamReader(s1.getInputStream()));//将字节流包装成字符流
		PrintStream ps=new PrintStream(s1.getOutputStream());	//PrintStream有写出换行的方法
		System.out.println(br.readLine());
		ps.println("阿拉斯加");
		System.out.println(br.readLine());
		ps.println("你有完没完!");
		s1.close();
	}

}

服务器端代码

package pra_24;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class J_46 {
	public static void main(String[] args) throws Exception{
		//服务器
		/*
		服务器初始版
		ServerSocket ss=new ServerSocket(12345);
		Socket s=ss.accept();			//接受客户端的请求
		InputStream is=s.getInputStream();		//获取客户端输入流
		OutputStream os=s.getOutputStream();	//获取客户端输出流
		os.write("abcdefghijk".getBytes());		//服务器向客户端写出数据
		byte[] arr=new byte[1024];
		int len=is.read(arr);					//读取客户端发过来的数据
		System.out.println(new String(arr,0,len)); 		//将数据转换成字符串并打印
		*/
		//服务器优化版
		ServerSocket ss=new ServerSocket(12345);
		Socket s=ss.accept();
		BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//将字节流包装成字符流
		PrintStream ps=new PrintStream(s.getOutputStream());	//PrintStream有写出换行的方法
		ps.println("欢迎光临");
		System.out.println(br.readLine());
		ps.println("阿拉斯加没用");
		System.out.println(br.readLine());
		s.close();
	}
}

服务端是多线程的方式

package pra_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class J_46 {
	public static void main(String[] args) throws Exception{
		//服务器端是多线程的
		ServerSocket ss=new ServerSocket(12345);
		while(true){
		final Socket s=ss.accept();
		new Thread(){
			public void run(){
				try {
					BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//将字节流包装成字符流
					PrintStream ps=new PrintStream(s.getOutputStream());	//PrintStream有写出换行的方法
					ps.println("欢迎光临");
					System.out.println(br.readLine());
					ps.println("阿拉斯加没用");
					System.out.println(br.readLine());
					s.close();
				} catch (IOException e) {
					e.printStackTrace();
				}	
			}
		}.start();
		
		}
	}
}

猜你喜欢

转载自blog.csdn.net/zoweiccc/article/details/83041094