基于tcp的socket通信(单个客户端与服务端)

来源:互联网 发布:电脑软件怎么恢复 编辑:程序博客网 时间:2024/05/17 17:16

//先启动服务端,创建8888端口号(一般采用系统1023之后的),监听,如果存在通信返回socket,获得该socket字节流,转化为字符流并用bufferedreader缓冲,随后打印出服务端接收到的信息,同时回复客户端信息,最后关闭资源。

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 server {public static void main(String []args){try {//1创建一个服务器端socket,即serversocketServerSocket serversocket=new ServerSocket(8888);//2,调用accept的方法进行监听,这边会阻塞Socket socket=serversocket.accept();InputStream is=socket.getInputStream();//获得字节流BufferedReader br=new BufferedReader(new InputStreamReader(is));//字节流转化为字符流并添加缓冲String info=null;while((info=br.readLine())!=null){System.out.println("我是服务端,客户端说:"+info);}socket.shutdownInput();//必须要及时关闭,因为readline这个方法是以\r\n作为界定符的,由于发送消息的那一端用的是PrintWriter的write()方法,这个方法并没加上\r\n,所以会一直等待//回复客户端OutputStream os=socket.getOutputStream();PrintWriter pw=new PrintWriter(os);pw.write("欢迎您!");pw.flush();pw.close();os.close();br.close();is.close();//关闭返回的 InputStream 将关闭关联套接字。         socket.close();serversocket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
//再启动客户端,需要给定访问的ip地址和端口号,然后写入信息,并接受服务端信息(这部分与上面正好颠倒),最后关闭资源。

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;//基于tcp协议的socket通信,客户端public class client {public static void main(String[] args) {try {Socket socket=new Socket("127.0.0.1",8888);//创建客户端socket,因为是本地,ip地址就是127.0.0.1OutputStream os=socket.getOutputStream();PrintWriter pw=new PrintWriter(os);pw.write("用户名:admin;密码:123");pw.flush();socket.shutdownOutput();//必须加上这句话,表示输出流的结束,注意此时不能关闭os,因为关闭os会关闭绑定的socket//在客户端获取回应信息InputStream is=socket.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(is));String info=null;while((info=br.readLine())!=null){System.out.println("我是客户端,服务端说:"+info);}br.close();is.close();pw.close();os.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


0 0