javaSocket实现服务器与客服端的简单通信

一、搭建服务器端

1)、创建ServerSocket对象绑定监听端口。
2)、通过accept()方法监听客户端的请求。
3)、建立连接后,通过输入输出流读取客户端发送的请求信息。
4)、通过输出流向客户端发送请求信息。
5)、关闭相关资源。

   package socket;

  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.io.PrintWriter;
  import java.net.ServerSocket;
  import java.net.Socket;

public class SocketService {
//搭建服务器端
public static void main(String[] args) throws IOException{
    SocketService socketService = new SocketService();
    //1、a)创建一个服务器端Socket,即SocketService 
    socketService.oneServer();
}
public  void oneServer(){
    try{
        ServerSocket server=null;
        try{
            server=new ServerSocket(5209);
            //b)指定绑定的端口,并监听此端口。
            System.out.println("服务器启动成功");
            //创建一个ServerSocket在端口5209监听客户请求
        }catch(Exception e) {
                System.out.println("没有启动监听:"+e);
                //出错,打印出错信息
        }
        Socket socket=null;
        try{
            socket=server.accept();
            //2、调用accept()方法开始监听,等待客户端的连接 
            //使用accept()阻塞等待客户请求,有客户
            //请求到来则产生一个Socket对象,并继续执行
        }catch(Exception e) {
            System.out.println("Error."+e);
            //出错,打印出错信息
        }
        //3、获取输入流,并读取客户端信息 
        String line;
        BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //由Socket对象得到输入流,并构造相应的BufferedReader对象
        PrintWriter writer=new PrintWriter(socket.getOutputStream());
        //由Socket对象得到输出流,并构造PrintWriter对象
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        //由系统标准输入设备构造BufferedReader对象
        System.out.println("Client:"+in.readLine());
        //在标准输出上打印从客户端读入的字符串
        line=br.readLine();
        //从标准输入读入一字符串
        //4、获取输出流,响应客户端的请求 
        while(!line.equals("end")){
        //如果该字符串为 "bye",则停止循环
            writer.println(line);
            //向客户端输出该字符串
            writer.flush();
            //刷新输出流,使Client马上收到该字符串
            System.out.println("Server:"+line);
            //在系统标准输出上打印读入的字符串
            System.out.println("Client:"+in.readLine());
            //从Client读入一字符串,并打印到标准输出上
            line=br.readLine();
            //从系统标准输入读入一字符串
        } //继续循环

        //5、关闭资源 
        writer.close(); //关闭Socket输出流
        in.close(); //关闭Socket输入流
        socket.close(); //关闭Socket
        server.close(); //关闭ServerSocket
    }catch(Exception e) {//出错,打印出错信息
        System.out.println("Error."+e);
    }
}
  }

二、搭建客户器端

1)、创建Socket对象,指明需要连接的服务器的地址和端口。
2)、建立连接后,通过输出流向服务器发送请求信息。
3)、通过输入流获取服务器的响应信息。
4)、关闭响应资源

package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;

public class SocketClient {
// 搭建客户端
public static void main(String[] args) throws IOException {
    try {
        // 1、创建客户端Socket,指定服务器地址和端口
        // Socket socket=new Socket("127.0.0.1",5200);
        Socket socket = new Socket("192.168.1.115", 5209);
        System.out.println("客户端启动成功");
        // 2、获取输出流,向服务器端发送信息
        // 向本机的52000端口发出客户请求
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 由系统标准输入设备构造BufferedReader对象
        PrintWriter write = new PrintWriter(socket.getOutputStream());
        // 由Socket对象得到输出流,并构造PrintWriter对象
        //3、获取输入流,并读取服务器端的响应信息 
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        // 由Socket对象得到输入流,并构造相应的BufferedReader对象
        String readline;
        readline = br.readLine(); // 从系统标准输入读入一字符串
        while (!readline.equals("end")) {
            // 若从标准输入读入的字符串为 "end"则停止循环
            write.println(readline);
            // 将从系统标准输入读入的字符串输出到Server
            write.flush();
            // 刷新输出流,使Server马上收到该字符串
            System.out.println("Client:" + readline);
            // 在系统标准输出上打印读入的字符串
            System.out.println("Server:" + in.readLine());
            // 从Server读入一字符串,并打印到标准输出上
            readline = br.readLine(); // 从系统标准输入读入一字符串
        } // 继续循环
        //4、关闭资源 
        write.close(); // 关闭Socket输出流
        in.close(); // 关闭Socket输入流
        socket.close(); // 关闭Socket
    } catch (Exception e) {
        System.out.println("can not listen to:" + e);// 出错,打印出错信息
    }
}

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容