服务器和客户端的socket编程

package com.socket;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;


/**
*客户端类
*/
public class Client
{
    public static void main(String[] args) throws IOException
    {
        // new Socket() 连接到指定的服务器端口,当前用的是本机的端口 
        Socket s = new Socket("localhost", 8888);
        //返回s代表连接到了服务器
        //s代表对服务器的连接
        
        InputStream in = s.getInputStream();
        OutputStream out = s.getOutputStream();
        
        out.write("连接服务器\n".getBytes("gbk"));
        out.flush(); //清理缓冲,确保发送到服务端
        Scanner sc = new Scanner(in);
        String str = sc.nextLine();
        System.out.println(str); //把从服务器返回的信息,打印到控制台。
        out.flush();
    }
}



package com.socket;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


/**
*服务器端类
*/
public class Server
{
    public static void main(String[] args) throws IOException
    {
        Server server = new Server();
        server.start();
    }
    
    public void start() throws IOException
    {
        //ServerSocket 对当前服务器的服务端口的绑定
        //这个端口号不能重复绑定,不能同时执行两边
        ServerSocket ss = new ServerSocket(8888);
        while (true)
        {
            
            //accept 开始等待(IO Block)客户连接(启动监听),如果没有客户端连接,一直挂起等待下去。
            //如果有客户端连接,才会继续执行下去,返回的Socket实例s 代表对于客户端连接。
            Socket s = ss.accept();
            //创建并启动客户服务线程,为客户服务
            //当前线程再次返回到accept等待,下一个客户连接
            new Service(s).start();//创建线程
        }
    }
    
    class Service extends Thread
    {
        Socket s;
        
        public Service(Socket s)
        {
            this.s = s;
        }
        
        public void run()
        {
            try
            {
                //s代表客户端
                //s 中的in代表从客户传递过来的流
                //s 中的out代表从服务器到客户端传输流
                InputStream in = s.getInputStream();
                Scanner sc = new Scanner(in);//System.in是操作系统后台
                OutputStream out = s.getOutputStream();
                //out.write("您好!您需要点啥?\n".getBytes("GBK"));
                //out.flush();//清理缓冲,确保发送到客户端
                
                while (true)
                {
                    String str = sc.nextLine();//IO Block
                    if (str.equals("连接服务器"))
                    {
                        out.write("连接成功!\n".getBytes("GBK"));
                        out.flush();
                        break;
                    }
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            
        }
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值