java通信系列之一by_书訢:通信基础和简单服务器客户端创建

引子:
感谢阅读
这一篇博客是我们整个JAVA通信的实操第一篇,希望大家多多支持

项目下载地址在文章末尾,如果出现了问题请留言~~
希望作为读者的你们可以多多关注我的作品,并留言或者加我qq一起学习

因为之前自己在学习的时候总是觉得有些博主们讲的有些快,所以我会讲的比较详细,能力好的可以快速掠过~~

若需转载请注明来处:http://blog.csdn.net/SX_csu2016sw
希望你们多多留言,你们的鼓励与指出的不足都是懒癌青年前进的动力

简单通信知识

这些时间接触了通信,在接下来的时间会一步一步将我学习通信的知识进行总结,并将结合有趣的项目进行分享知识,以帮助同行的DREAMER

通信的一些命令行使用总结

ping:使用ping命令可以检查网络是否通的,例如这边我使用的ping www.baidu.com 来检测我和百度是否连通
!!注意:ping命令只可以检测我们是否能够与指定ip的主机连接,并不能知道是否开启某个端口
这里写图片描述

telnet:telnet用来连接指定ip的主机
例如上面的图片中我们知道,百度在一台服务器对我们的响应,ip为112.80.248.73
我们可以使用telnet 112.80.248.73 80来进行连接 telnet +ip+ 端口号
提供给web端口都是80或者8080,这里引申一下网页的一些原理
浏览器通过我们的域名将访问请求发送出去,在某一台服务器响应以后将html等反馈,在浏览器上进行解释就可以形成我们的网页了(希望读者自己去了解一下,书訢可能不是正确的)

netstat /netstat -an:
我们的电脑无时无刻不在通信,通过这个命令我们就可以知道我们的电脑现在在和哪些电脑发生着通信
这里写图片描述

开始创建服务器端


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

public class QQ_v1 {
    private ServerSocket server;

    /**
     * 创建我们的服务器
     * @param port:端口号
     */
    public void setSever(int port){
        try {
            server = new ServerSocket(port);//这边需要的是n<65535的所以会出现IO异常
            System.out.println("服务器创建成功");
            while(true){
                Socket socket=server.accept();
                process(socket);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * process是对每一个客户端的处理
     * @param socket客户端对象
     * @throws Exception
     */
    public void process(Socket socket) throws Exception{
        OutputStream out =socket.getOutputStream();
        InputStream ins=socket.getInputStream();

        sendMsg(out,ins,socket,"欢迎来到我的服务器");

        String read=readString(ins);
        while(!read.equals("bye")){//---------字符串的对比使用equals
            System.out.println("客户机说了"+read);
            sendMsg(out,ins,socket,"服务器收到"+read+"\r\n");
            read=readString(ins);
        }

        sendMsg(out,ins,socket,"欢迎下次再来");

        out.close();
        ins.close();
        socket.close();
    }
    /**
     * 发送消息都封装在这个函数中
     * @param out
     * @param ins
     * @param socket
     * @param s
     * @throws IOException
     */
    public void sendMsg(OutputStream out,InputStream ins,Socket socket,String s) throws IOException{
        byte []data=s.getBytes();
        out.write(data);
        out.flush();
    }
    /**
     * 读一行的数据使得成为String类型,同时使用trim()作用下面写了
     * @param input
     * @return
     * @throws Exception
     */
    public String readString(InputStream input) throws Exception  {
        StringBuffer s =new StringBuffer();
        char c=0;
        while (c!=13){
            int i=input.read();
            c=(char)i;
            s.append(c);
        }
        return s.toString().trim();//返回一个字符串,该字符串的值是这个字符串,去掉了所有的开头和后面的空格。
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        QQ_v1 server=new QQ_v1();
        server.setSever(9090);
    }
}

以上就是我们简单服务器的所有代码。
上面我已经将普通的封装了一下,解释一下几个点:
1.ServerSocket server=new ServerSocket (port)创建服务器对象,因为本机运行代码所以ip是默认传过去的,只需要再给一个端口号就可以了。
2. Socket socket=server.accept();这边会产生阻塞,原因是这边我们的服务器会一直等待着客户端的连接,等到客户机连接上了以后我们的socket就会将客户机保存至socket对象中,同理在之后我们写客户端的时候socket保存的就是我们的服务器。
3. 其他的就是IO处理,但是需要注意的是我们有一个函数readString();里面的一些操作还是值得一看的~
4. 最后我们怎么连接上服务器呢?
CMD->telnet localhost 9090 localhost表示本机IP
(因为我在主函数传入的端口号是9090所以连接本机时候也需要9090)

运行实例:
这里写图片描述
这里写图片描述

http://download.csdn.net/detail/sx_csu2016sw/9918498源代码下载地址
感谢阅读,多多留言,一起学习~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值