socket 开发一

其实web 开发的底层就是socket 编程

数据是通过流读取

服务端

public class WeatherServer {
    public static void main(String[] args) throws IOException {
        // 创建socket 服务,应用服务端口建议在1万以上
        ServerSocket server = null;
        Socket socket = null;
        DataInputStream di=null ;
        DataOutputStream ds=null ;
        try {
            server = new ServerSocket(12345);
            // 按受客户端链接
            socket = server.accept();
            //为了好处理字符串
            // 接受客户端请求
            di=new DataInputStream(socket.getInputStream());
            // 向服务端发送请求
            ds=new DataOutputStream(socket.getOutputStream());
            //客户端向服务端发送的天气所在城市
            String cityName =di.readUTF();
            System.out.println("from client...."+cityName);
            //服务端向客户端返回天气情况
            String result ="晴";
            ds.writeUTF("晴");
            System.out.println("to client...."+result);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            di.close();
            ds.close();
            //服务端一般是不关闭资源的,由客户端关闭
            //socket.close();
        }

    }

}

客户端代码:

public class WeatherClient {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket client = null;
        DataInputStream di = null;
        DataOutputStream ds = null;
        client = new Socket("127.0.0.1", 12345);
        try {

            // 接受客户端请求
            di = new DataInputStream(client.getInputStream());
            // 向服务端发送请求
            ds = new DataOutputStream(client.getOutputStream());
            String cityName ="北京";
            ds.writeUTF(cityName);
            String result =di.readUTF();
            System.out.println("接受服务端.."+result);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            di.close() ;
            ds.close();
            client.close();
        }

    }

}

其实服务端开发要有可持续能力,保证线程一直在运行,那么上面的代码就可以改成这样:

public class WeatherServerV2 {
    public static void main(String[] args) throws IOException {
        // 创建socket 服务,应用服务端口建议在1万以上
        ServerSocket server = null;
        Socket socket = null;
        DataInputStream di=null ;
        DataOutputStream ds=null ;
        while(true){
            try {
                server = new ServerSocket(12345);
                // 按受客户端链接
                socket = server.accept();
                //为了好处理字符串
                // 接受客户端请求
                di=new DataInputStream(socket.getInputStream());
                // 向服务端发送请求
                ds=new DataOutputStream(socket.getOutputStream());
                //客户端向服务端发送的天气所在城市
                String cityName =di.readUTF();
                System.out.println("from client...."+cityName);
                //服务端向客户端返回天气情况
                String result ="晴";
                ds.writeUTF("晴");
                System.out.println("to client...."+result);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                di.close();
                ds.close();
                //服务端一般是不关闭资源的,由客户端关闭
                //socket.close();
            }
        }

    }

}

同样的道理,服务端不仅要有持续运行能力,还要有处理并发的能力,我们可以把客户端也改成死循环

public class WeatherClientVersion2 {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket client = null;
        DataInputStream di = null;
        DataOutputStream ds = null;
        client = new Socket("127.0.0.1", 12345);
        while(true){
            try {

                // 接受客户端请求
                di = new DataInputStream(client.getInputStream());
                // 向服务端发送请求
                ds = new DataOutputStream(client.getOutputStream());
                String cityName ="北京";
                ds.writeUTF(cityName);
                String result =di.readUTF();
                System.out.println("接受服务端.."+result);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                di.close() ;
                ds.close();
                client.close();
            }

        }
        }

}
时间: 2024-09-28 11:26:41

socket 开发一的相关文章

Socket开发

Socket开发框架之消息的回调处理 伍华聪 2016-03-31 20:16 阅读:152 评论:0 Socket开发框架之数据加密及完整性检查 伍华聪 2016-03-29 22:39 阅读:709 评论:2 Socket开发框架之数据传输协议 伍华聪 2016-03-26 00:00 阅读:1049 评论:1 Socket开发框架之框架设计及分析 伍华聪 2016-03-22 11:15 阅读:1931 评论:6 Socket开发框架之数据采集客户端 伍华聪 2011-06-08 23:4

快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是Windows,装虚拟机也麻烦,所以还不如30块钱 买个腾讯云,用putty远程练上去写代码呢. 我一直都是putty+VIM在Linux下开发代码,好几年了,只要把putty和VIM配置好,其实 开发效率挺高的. 买好腾讯云后,装个Centos,会分配个外网IP,然后买个域名,在DNSPod解析过去

ANDROID SOCKET 开发

转载于zeta的文章(http://blog.sina.com.cn/s/blog_685790700100xjuo.html) 最近在研究Android应用软件的开发,之前做了7.8年的C#,对Java并不熟悉,不过还好能够看得懂一些! 根据之前的经验,应用软件的网络通信无非就是Socket和HTTP,其中Socket又可以用TCP和UDP,HTTP的话就衍生出很多方式,基础的HTTP GET和POST请求,然后就是WebService的SOAP. 在这些方式中,Socket当然是最基础的.因

c socket 开发测试

c语言异常 参照他人代码写一个tcp的 socket 开发测试 异常A,在mac osx系统下编译失败,缺库转到debian下. 异常B,include引用文件顺序不对,编译大遍异常 异常C,/usr/include/x86_64-linux-gnu/sys/types.h:34:1: error: unknown type name ‘__u_char’ 文件前注释的问题,删掉注释则通过 #include <sys/types.h> #include <sys/socket.h>

(转)Socket开发时,Available为0,实际还有数据的问题

本文转载自:http://blog.csdn.net/youbl/article/details/11067369 这段时间处理Socket通讯,比如文件传输,通常代码如下:string filename = @"c:\abc.txt";// 发送文件名字符串长度(测试代码,实际请传输字符串字节长度)SendLength(socket, filename.Length);// 发送文件名字符串SendData(socket, filename);// 发送文件长度和文件实际内容Send

socket开发基础

原 荐 iOS的socket开发基础 发表于8个月前(2014-11-03 15:43)   阅读(9070) | 评论(27) 161人收藏此文章, 我要收藏 赞12 7.16,杭州,阿里巴巴.阿里百川无线开放大会报名开启,用技术驱动无线新商业 摘要 详细介绍了iOS的socket开发,说明了tcp和udp的区别,简单说明了tcp的三次握手四次挥手,用c语言分别实现了TCPsocket和UDPsocket的客户端和服务端,本文的作用是让我们了解socket的一些原理以及底层基本的结构. 由于博

练习题|网络编程-socket开发

1.什么是C/S架构? C指的是client(客户端软件),S指的是Server(服务端软件),C/S架构的软件,实现服务端软件与客户端软件基于网络通信. 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 互联网协议就是计算机界通用的语言:互联网协议分为osi七层或tcp/ip五层或tcp/ip四层: 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0. 数据链路层的功能:定义了电信号的分组方式按照以太网协议:一组电信号构成一个数据包,叫做一组数据'帧

第六章|网络编程-socket开发

1.计算机基础 作为应用开发程序员,我们开发的软件都是应用软件,而应用软件必须运行于操作系统之上,操作系统则运行于硬件之上,应用软件是无法直接操作硬件的,应用软件对硬件的操作必须调用操作系统的接口,由操作系统操控硬件. 比如客户端软件想要基于网络发送一条消息给服务端软件,流程是: 1.客户端软件产生数据,存放于客户端软件的内存中,然后调用接口将自己内存中的数据发送/拷贝给操作系统内存 2.客户端操作系统收到数据后,按照客户端软件指定的规则(即协议).调用网卡发送数据 3.网络传输数据 4.服务端

第六章 网络编程-SOCKET开发——续2

6.5--粘包现象与解决方案 简单远程执行命令程序开发 是时候用户socket干点正事呀,我们来写一个远程执行命令的程序,写一个socket client端在windows端发送指令,一个socket server在Linux端执行命令并返回结果给客户端 执行命令的话,肯定是用我们学过的subprocess模块啦,但注意注意注意: res=subprocess.Popen(cmd.deocde('utf-8'),shell=subprocess.PIPE,stdout=subprocess.PI