客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据

客户端:

获取Socket对象,new出来,构造参数:String的ip地址,int的端口号

调用Socket对象的getOutputStream()方法,获取到OutputStream对象

调用OutputStream对象的write()方法,输出流输出数据,参数:byte[]字节数组

调用Socket对象的getInputStream()方法,获取到InputStream对象

调用InputStream对象的read()方法,读取数据得到读取的长度,参数:byte[]字节数组

获取String对象,new出来,构造参数:byte[]字节数组,0开始,len长度

调用Socket对象的close()方法,关闭socket

客户端的输入流读取read()方法,是阻塞式方法,会在这里等待服务端返回数据

服务端:

获取ServerSocket对象,new出来,构造参数:int的端口号

调用ServerSocket对象的accept()方法,得到Socket对象

调用Socket对象的getInputStream()方法,得到输入流对象,解析输入流

调用Socket对象的getOutputStream()方法,得到输出流对象,输出数据

调用Socket对象的close()方法,关闭socket

调用ServerSocket对象的close()方法,关闭ServerSocket

服务端的accept()方法,是阻塞式方法,会在这里等待客户端的连接

Server.java

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket; /**
* 服务端
*
* @author taoshihan
*
*/
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(10004);
// while (true) {
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream(); byte[] buf = new byte[1024];
int len = inputStream.read(buf); InetAddress ip = socket.getInetAddress(); System.out.println("来自" + ip.getHostAddress() + "说:"
+ new String(buf, 0, len));
Thread.sleep(10000);//睡眠10秒钟,客户端会一直等待
OutputStream out=socket.getOutputStream();
out.write("我是服务端,已经收到信息".getBytes()); socket.close();
serverSocket.close();
//}
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket; /**
* 客户端
* @author taoshihan
*
*/
public class Client {
public static void main(String[] args) throws Exception, IOException {
Socket socket=new Socket(InetAddress.getLocalHost(), 10004);
OutputStream outputStream=socket.getOutputStream();
outputStream.write("我是客户端,服务端你好".getBytes()); InputStream in=socket.getInputStream();
byte[] b=new byte[1024];
int len=in.read(b);//这里会阻塞,等待服务端的返回
System.out.println(new String(b,0,len));
socket.close();
}
}

Client.java

最新文章

  1. Document-对象属性和常用的对象方法
  2. Linux下配置ip地址四种方法
  3. [Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法
  4. Java实现单向链表的增删改查
  5. 一道试题引发的血案 int *ptr2=(int *)((int)a+1);
  6. jquery禁用右键单击、F5刷新
  7. vue 自定义组件 v-model双向绑定、 父子组件同步通信
  8. 设置chrome浏览器背景颜色
  9. 线段树(segment_tree)
  10. OpenCV4.0学习笔记
  11. 开发Spring过程中几个常见异常(三):java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast to com.edu.aop.ArithmeticCalculatorImpl at com.edu.aop.Main.main(Main.java:11)
  12. Git 和 Repo常用命令
  13. Reactor反应器模式 (epoll)
  14. 一个简单文本分类任务-EM算法-R语言
  15. Python api认证
  16. 电子邮件 -- 图解TCP_IP_第5版
  17. Elasticsearch doc_value认识
  18. CDN公共库、前端开发常用插件一览表(VendorPluginLib)
  19. 查看iptables状态-重启
  20. DotNetBar ComboBoxEx

热门文章

  1. python中的内置函数,递归,递归文件显示(二),二分法
  2. FFMPEG 的学习
  3. “全栈2019”Java第一百零八章:匿名内部类与final关键字
  4. luncene 查询字符串的解析-QueryParser类
  5. nginx负载均衡之入门配置
  6. CF1012C Hills 题解【DP】
  7. OAuth2.0认证和授权以及单点登录
  8. javascript中childNodes与children的区别
  9. hibernate3.3.2搭建log4j日志环境
  10. SpringSecurity自定义用户登录