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

来源:互联网 发布:世界国家省市区数据库 编辑:程序博客网 时间:2024/05/17 09:20

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.创建serversocketServerSocket 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();}}}



1 0