socket编程浅知识
1:网络7层和tcp/ip5层
tcp协议; 三次握手 四次挥手 使用字节流进行信息交互
2:IP和端口
ip: 计算机在网络里面的唯一标识
端口: 程序在电脑里面的唯一标识
3: socket编程
InetAddress(ip和域名对象)
1 InetAddress[] addrs = InetAddress.getAllByName("www.baidu.com");
2
3 if (addrs != null && addrs.length > 0) {
4
5 for (InetAddress addr : addrs) {
6
7 System.out.println("--->" + addr.getHostAddress());
8
9 }
10
11 }
客户端 服务端 模型图
案例:完成客户端发送消息给服务端,并且服务端回答消息给客户端
服务器端:
1 package com.lv.study.pm.socket2;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.InputStreamReader;
8 import java.io.OutputStream;
9 import java.io.OutputStreamWriter;
10 import java.net.ServerSocket;
11 import java.net.Socket;
12
13 public class DemoServer {
14
15 public static void main(String[] args) {
16
17
18 try {
19 //1:新建一个服务端对象
20 ServerSocket serverSocket=new ServerSocket(8888);
21
22 System.out.println("i am server , start server......");
23
24 //2:等待客服端连接,开始监听
25 //如果有连接;将会得到客服端的连接(socket)
26 Socket server= serverSocket.accept();
27
28 //3:向客服端发送信息
29 OutputStream os=server.getOutputStream();
30
31 //3.1 将字节流包装成字符流进行操作
32 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
33
34 //3.2 发送信息 记得加上\n【为了方便读取】
35 String msg="hello,Najing,you ip:"+server.getInetAddress().getHostAddress()+"\n";
36 bw.write(msg);
37 bw.flush();//不然对方接收不了 这里不能用close
38
39 //4 接收客服端发给我的信息
40 InputStream is=server.getInputStream();
41
42 //4.1 将字节流变成字符流来操作
43 BufferedReader br=new BufferedReader(new InputStreamReader(is));
44
45 //4.2 信息读取
46 String readLine =br.readLine();
47 System.out.println(readLine);
48
49
50 } catch (IOException e) {
51 e.printStackTrace();
52 }
53
54 }
55
56 }
客服端:
1 package com.lv.study.pm.socket2;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.OutputStream;
8 import java.net.Socket;
9 import java.net.UnknownHostException;
10
11 public class DemoClient {
12
13 public static void main(String[] args) {
14
15 //1:新建一个socket对象 根据ip和端口
16 String ip="127.0.0.1";
17 int port=8888;
18 try {
19 Socket client=new Socket(ip,port);
20
21 //2 接收服务器发过来的消息
22 InputStream is=client.getInputStream();
23
24 //2.1转成字符流
25 BufferedReader br=new BufferedReader(new InputStreamReader(is));
26 String r1=br.readLine();
27 System.out.println("服务器发来的消息"+r1);
28
29 //3向服务器发送消息
30 OutputStream os=client.getOutputStream();
31 String msg="hello Nanjing,i am client \n";//\n代表读取的时候readline能读到
32 os.write(msg.getBytes());
33 os.flush();//如果不清空会有问题
34
35
36 } catch (UnknownHostException e) {
37 e.printStackTrace();
38 } catch (IOException e) {
39 e.printStackTrace();
40 }
41
42 }
43
44 }
结果:
socket编程浅知识的更多相关文章
- 你得学会并且学得会的Socket编程基础知识
这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblog ...
- Linux下socket编程基本知识
本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...
- Socket编程基础知识
端口号常识: 端口号被从1 开始分配. 通常端口号超出255 的部分被本地主机保留为私有用途. 1到255 之间的号码被用于远程应用程序所请求的进程和网络服务. 每个网络通信循环地 ...
- 你得学会并且学得会的Socket编程基础知识(续)——Silverlight客户端
本文将在这个案例的基础上,加入一个特殊场景,利用Silverlight来实现客户端.有的朋友可能会说,其实是一样的吧.请不要急于下结论,有用过Silverlight的朋友都有这种体会,很多在标准.NE ...
- C# socket编程实践——支持广播的简单socket服务器
在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...
- C# socket编程实践
C# socket编程实践——支持广播的简单socket服务器 在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# ...
- PHP Socket 编程进阶指南
学习准备 Linux 或者 Mac 环境: 安装有 Sockets 扩展: 了解 TCP/IP 协议. socket函数只是PHP扩展的一部分,编译PHP时必须在配置中添加 --enable-sock ...
- Android Socket编程
花了大概两天的时间,终于把Android的Socket编程给整明白了.抽空和大家分享一下: Socket Programming on Android Socket 编程基础知识: 主要分服务器端编程 ...
- PHP socket编程需要了解的一些基本知识
前面讲到了 fsockopen 的各种情况,其中涉及了很多其它知识,比如chunked分段传输,Keep-Alive,HTTP头字段等额外的知识,如果对这些知识一知半解,会影响对 PHP 的 sock ...
- 浅谈Socket编程
浅谈Socket编程 说到Socket,想必大家会觉得陌生又熟悉.许多同学听说过Socket,但仅仅知道它翻译成中文叫做套接字,除此之外似乎并没有太多的了解了.那么今天我就来抛砖引玉地聊一聊Socke ...
随机推荐
- goland JetBrains编辑器:代码爆红找不到引用,但项目可运行
前言 goland JetBrains 编辑器:代码爆红找不到引用,但项目可运行 解决 goland 缓存已满,需要清除缓存
- Kubernetes 编译 kubeadm 修改证书有效期到 100 年
前言 kubeadm 生成的客户端证书在 1 年后到期.过期后,会导致服务不可用,使用过程中会出现:x509: certificate has expired or is not yet valid. ...
- PHP的回调函数
所谓的回调函数,就是指调用函数时并不是向函数中传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中,这个作为参数的函数就是回调函数.通俗的来说,回调函数也是一个我们定义的函数,但是不 ...
- 一次Java后端服务间歇性响应慢的问题排查记录
分享一个之前在公司内其它团队找到帮忙排查的一个后端服务连接超时问题,问题的表现是服务部署到线上后出现间歇性请求响应非常慢(大于10s),但是后端业务分析业务日志时却没有发现慢请求,另外由于服务容器li ...
- EBUSY: resource busy or locked, rmdir
方案一: 方案二: !!! 出现问题后,千万不要忽略npm提示你的警告... 如果以上两种方案还未解决,那么大概率是因为你的npm版本较低导致的,升级你的npm. cnpm install -g np ...
- 【Guava工具类】Strings&Ints
String相关工具 Strings Guava 提供了一系列用于字符串处理的工具: 对字符串为null或空的处理 nullToEmpty(@Nullable String string):如果非空, ...
- 【Linux】3.7 定时任务调度
3.7定时任务调度 1. 任务调度原理 crond任务调度:crontab进行定时任务调度 使用方法:crontab [选项] crontab [选项] -e:编辑crontab定时任务 -i:查询c ...
- mybatis-plus.global-config.db-config.id-type=auto 和 @TableId(value = "id", type = IdType.ASSIGN_ID)哪个优先生效
对于id自动生成的方式,有注解和配置两种. 含义相同:不过设置自动增长的时候必须保证数据库中id是自增,assign_id和assign_uuid则不需要. yml配置: mybatis-plus: ...
- redis的作用:高性能和高并发
一.高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作mysql,半天查出来一个结果,耗时600ms.但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用 ...
- python Response的语法
-- r.status_code #响应状态码 -- r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 -- r.headers #以字典对象存储服务器响应头 ...