关闭

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

标签: socketjavatcp通讯
2588人阅读 评论(0) 收藏 举报

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();
		}
	}
}



2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3119次
    • 积分:70
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档