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

客户端:

获取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

[javaSE] 网络编程(TCP服务端客户端互访阻塞)的更多相关文章

  1. python网络编程TCP服务多客户端的服务端开发

    #服务多客户端TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何 ...

  2. Java网络编程(TCP服务端)

    /* * TCP服务端: * 1.创建服务端socket服务,并监听一个端口 * 2.服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象 * 3.可以通过获 ...

  3. 第5章-unix网络编程 TCP/服务端程序示例

    这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的  客户端代码 #include "unp. ...

  4. Mina TCP服务端客户端 示例

    服务端代码: package com.xd.nms.example; import java.io.IOException; import java.net.InetSocketAddress; im ...

  5. java网络编程-单线程服务端与客户端通信

    该服务器一次只能处理一个客户端请求;p/** * 利用Socket进行简单服务端与客户端连接 * 这是服务端 */public class EchoServer { private ServerSoc ...

  6. 网络编程TCP/IP实现客户端与客户端聊天

    一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...

  7. .net for TCP服务端 && 客户端

    关键代码 详细代码请看示例代码 Service //创建套接字 IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(ipaddress), port); / ...

  8. 【网络编程】服务端产生大量的close_wait状态的进程分析

    首先要明白close_wait状态是在tcp通信四次握手时的一个中间状态: 即当被动关闭方发送完ACK后进入的状态.这个状态的结束,即要达到下一个状态LASK_ACK需要在发无端发送完剩余的数据后(s ...

  9. 网络编程~~~~socketserver服务端

    socketserver服务端 import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self ...

随机推荐

  1. java.lang.IllegalStateException: Cannot call sendError() after the response has been committed解读

    源代码: @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Ob ...

  2. httpclient4.5 https请求 忽略身份验证

    import org.apache.commons.collections.MapUtils; import org.apache.http.*; import org.apache.http.cli ...

  3. Spring 并发事务的探究

    前言 在目前的软件架构中,不仅存在单独的数据库操作(一条SQL以内,还存在逻辑性的一组操作.而互联网软件系统最少不了的就是对共享资源的操作.比如热闹的集市,抢购的人群对同见商品的抢购由一位售货员来处理 ...

  4. C#-进制转换、基础语句、语句的总结与练习——★for循环:九九乘法表、三角形、菱形★

    //for循环嵌套练习——打一个九九乘法表 ; i <= ; i++) { ; j <= i; j++) { Console.Write(j + "×" + i + & ...

  5. canvas+js+面向对象的矩形封装

    效果: Rect.js /* 1. 封装属性: x, y w , h, fillStyle strokeStyle rotation opacity 2.render */ function Rect ...

  6. jenkins+appium android app自动化测试

    jenkins安装 pytest+jenkins安装+allure报告 新建任务 其他默认,保存 立即构建 test_login.py from src.pages import login_page ...

  7. mysql数据库使用脚本实现分库备份过程

    一条命令解决分库分表备份: [root@db01 data]# mysql -uroot -p123456 -e "show databases;"|egrep -v " ...

  8. SqlServer子查询、高级

    子查询:把一个结果集让别人继续分析查询的就叫子查询 子查询如果定义了别名,在查询引用时,必须使用别名 --子查询定义了别名,引用就必须用别名 select id,n from Person,(sele ...

  9. CPU飚高问题排查基本步骤

    CPU 飚高 一般是死循环或者死锁问题导致. 1. 通过 top  命令找到 CPU 消耗最高的进程,并记住进程 ID {pid}.top -M -n 2 -d 3 >{pid}/top.txt ...

  10. chm 已取消到该网页的导航,打不开!

    方法 11. 双击此 .chm 文件. 2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框. 3. 单击“打开”. 方法 21. 右键单击该 CHM 文件,然后单击“属性”. ...