网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
 
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
 
所以需要

服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
 
搭建客户端 单方向
  1. //客户端
  2. public class Client {
  3.  
  4. public static void main(String[] args) throws Exception {
  5. // 要连接的ip和端口,并监听ip和端口 两个端口需一样
  6. Socket sk = new Socket("192.168.60.1", 49154);
  7. // 建立连接后获得输入流
  8. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  9. BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
  10. String line;
  11. // 循环给line添加值
  12. while ((line = br.readLine()) != null) {
  13. bw.write(line);
  14. bw.newLine();
  15. bw.flush();
  16. InputStream is = sk.getInputStream();
  17. byte[] by = new byte[1024];
  18. int num = is.read(by);
  19. // by一口气传输多少字节 0 num 等于有多少字节
  20. String h = new String(by, 0, num);
  21. }
  22. br.close();
  23. bw.close();
  24. sk.close();
  25.  
  26. }
  1. //服务端
  2. public class Server {
  3. public static void main(String[] args) throws Exception {
  4. // 监听指定的端口 端口号最好从49152到65535之间
  5. ServerSocket sk = new ServerSocket(49154);
  6. // sk将一直等待连接的到来
  7. Socket s = sk.accept();
  8. // 建立好连接后,从Socket中获取输入流,并建立缓冲区进行读取
  9. BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  10. BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
  11. // line 等于客户端添加的内容 如果不添加会一直在 Socket s = sk.accept()等待到来
  12. String line;
  13. while ((line = br.readLine()) != null) {
  14. System.out.println("服务端 \t" + line);
  15. }
  16. // 释放资源
  17. s.close();
  18. sk.close();
  19.  
  20. /*
  21. * BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null,
  22. * 但如果client的socket末经关闭就销毁, 则会产生IO异常.
  23. * 正常的方法就是使用socket.close()关闭不需要的socket.
  24. */
  25.  
  26. }

socket 简单了解的更多相关文章

  1. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  2. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  3. C# .NET Socket 简单实用框架,socket组件封装

    参考资料 https://www.cnblogs.com/coldairarrow/p/7501645.html 根据.NET Socket 简单实用框架进行了改造,这个代码对socket通信封装还是 ...

  4. C# Socket简单例子(服务器与客户端通信)

    这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...

  5. Flash Socket简单调试工具

    写了一个简单的Flash Socket调试工具,可用来简单调试本地或者外部socket服务器,使用的时候注意Flash socket的安全策略问题,有问题请联系sky-wang@qq.com.

  6. C#的Socket简单实现消息发送

    Socket一般用于网络之间的通信,在这里,实现的是服务端与客户端的简单消息通信.首先是客户端的搭建,一般步骤是先建立Socket绑定本地的IP和端口,并对远端连接进行连接进行监听,这里的监听一般开启 ...

  7. Java Socket 简单梳理

    Sockets let you send raw streams of bytes back and forth between two computers, giving you fairly lo ...

  8. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  9. Python Socket 简单聊天室1

    这是第一版,最简单的,仅仅实现了通信,你收我发,我收你发而已.下篇将介绍,基于异步多线程的聊天室: 客户端: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  10. C# .NET Socket 简单实用框架

    背景: 首先向各位前辈,大哥哥小姐姐问一声好~ 这是我第一次写博客,目前为一个即将步入大四的学生,上学期在一家公司实习了半年,后期发现没有动力,而且由于薪水问题(废话嘛),于是跳槽到这家新的公司. 说 ...

随机推荐

  1. c++中各类型数据所占字节数(一)

    转自: https://blog.csdn.net/hi_baymax/article/details/82415896 和机器字长及编译器有关系: 所以,int,long int,short int ...

  2. Monkey

    什么是 Monkey Monkey 是一个 Android 自动化测试小工具.主要用于Android 的压力测试, 主要目的就是为了测试app 是否会Crash. Monkey 特点 顾名思义,Mon ...

  3. learning makefile foreach

  4. Mdate时间插件

    在做移动端的页面时,用户报名某个活动,需要填写她的出生日期,这时可以用Mdate插件来完成,已达到更好的用户体验 操作很简单,效果也不错,是滑动选择时间的,也有回调函数方便我们使用.只需要在页面中引入 ...

  5. 字符编码 ASCII、Unicode和UTF-8的关系

    摘抄自廖雪峰 教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机 ...

  6. selenium自动化实例: 多层框架中关于iframe的定位,以及select下拉框选择

    对于一个自动化的初学者来说会很常见的遇到元素明明存在却始终定位不到, 从而导致脚本报错,当然定位不到元素的原因很多, 其中一种就是多层框架iframe导致的 下方截图示意: 下方为写脚本时候的示例并其 ...

  7. c/c++面试题一

    1.找错 void test1() { char string[10]; char *str1="0123456789"; strcpy(string,str1); } 试题一字符 ...

  8. Linux权限总结

    第1章 课前小拓展 虚拟机打不开原因 问题: 该虚拟机似乎正在使用中. 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权.否则,请按“取消(C)”按钮以防损坏. 配置文件: E:\vm ...

  9. js操作BOM对象

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. 第九次java课堂笔记