tcp通讯的方式并使用socket建立客户端与服务器的通信的过程

tcp是一种通讯方式,也叫做tcp协议,是用来规范socket数据交互的。

socket是用来做通讯的,它的作用是发送数据和接受数据。举例说两个人打电话,电话就相当于是socket,而打电话的人相当于ip。

下面是一个java实现两个程序之间通信的例子:

服务端:

服务端要做的工作是:

1.创建服务端serversocket,指定端口号和ip地址;

2.调用accept()方法开始监听;

3.调用getInputStream()方法 获取输入流,读取客户端信息;

4.调用getOutputStream()方法获取输出流。响应客户端的请求;

5.别忘了关闭资源。

 
 
 

	package zjyang.server;
	
	import java.io.BufferedReader;
	import java.io.IOException;
	import java.io.InputStream;
	import java.io.InputStreamReader;
	import java.io.OutputStream;
	import java.io.PrintWriter;
	import java.net.ServerSocket;
	import java.net.Socket;
	
	public class SocketServer {
	
		public static int port = 8888;//客户端端口号
		public static void main(String[] args){
			SocketServer socketServer = new SocketServer();
			socketServer.start();
		}
		
		public void start(){
			try {
				//1.创建serversocket
				ServerSocket serverSocket = new ServerSocket(port);
				//2.调用accept()方法开始监听
				Socket socket = serverSocket.accept();
				//3. 获取输入流,读取客户端信息
	            InputStream is = socket.getInputStream();//字节输入流
	            InputStreamReader isr = new InputStreamReader(is);//将字节转换成字符
	            BufferedReader br = new BufferedReader(isr);//为输入流添加缓冲
	            String info = null;
	            while((info = br.readLine()) != null)//循环读取客户端信息
	            {
	                System.out.println("我是服务器,客户端说:    "+info);
	            }
	            socket.shutdownInput();//关闭输入流,
	            //4.获取输出流。响应客户端的请求
	            OutputStream os = socket.getOutputStream();
	            PrintWriter pw = new PrintWriter(os);
	            pw.write("欢迎您!");
	            pw.flush();//刷新缓存
	            
	            //5.关闭资源
	            pw.close();
	            os.close();
	            br.close();
	            isr.close();
	            is.close();
	            socket.close();
	            serverSocket.close();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}

客户端:

客户端要做的工作是:

1.创建客户端Socket,指定服务器端口号和地址;

2.调用getOutputStream()方法获取输出流,向服务器端发送信息;

3.调用getInputStream()方法获取输入流,并读取服务器端的响应信息;

4.别忘了关闭资源。


 

package zjyang.client;

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

public class SocketClient {

	public static void main(String[] args) {
		SocketClient socketClient = new SocketClient();
		socketClient.start();
	}
	
	private void start(){
		try {
			//1.创建客户端Socket,指定服务器端口号和地址
			Socket socket = new Socket("localhost",8888);
			//指定本地地址,端口号为8888
	        //2.获取输出流,向服务器端发送信息
	        OutputStream os = socket.getOutputStream();//字节输出流
	        PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
	        pw.write("用户名: admin;密码: 123 ");
	        pw.flush();
	        socket.shutdownOutput();
	        //3.获取输入流,并读取服务器端的响应信息
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;
            while ((info = br.readLine()) != null)
            {
                System.out.println("我是客户端,服务器说:    "+info);
            }
            //4.关闭资源
            br.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
		} catch (UnknownHostException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值