初识Socket通讯编程(一)
- 传统的io流方式(BIO模式),阻塞型;
- NIO的方式;
- AIO的方式;
- //<--------------服务端代码-------------------->
- public class SocketReadLister implements Runnable {
- private final int tcpPort=9999;
- private ServerSocket serverSocket;
- @Override
- public void run() {
- try {
- serverSocket = new ServerSocket(this.tcpPort);
- while(true){
- Socket socket = serverSocket.accept();
- //socket.setSoTimeout(5*1000);//设置读取数据超时时间为5s
- new Thread(new SocketReadThread(socket)).start();
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- public static void main(String[] args) throws Exception{
- new Thread(new SocketReadLister()).start();
- }
- }
- public class SocketReadThread implements Runnable {
- private Socket socket;
- public SocketReadThread(Socket socket) {
- this.socket = socket;
- }
- @Override
- public void run() {
- byte[] data = new byte[1024];
- try {
- InputStream is=socket.getInputStream();
- int length=0;
- int num=is.available();
- while((length = is.read(data)) != -1){
- String result = new String(data);
- System.out.println("数据available:"+num);
- System.out.println("数据:"+result);
- System.out.println("length:" + length);
- }
- System.out.print("结束数据读取:"+length);
- }catch (SocketTimeoutException socketTimeoutException){
- try {
- Thread.sleep(2*1000);
- }catch (Exception e) {
- e.printStackTrace();
- }
- run();
- } catch (Exception e){
- e.printStackTrace();
- try {
- socket.close();
- }catch (IOException io){
- io.printStackTrace();
- }
- }
- }
- }
- //<---------------------客户端代码---------------------------->
- public class SocketClient implements Runnable {
- private final int tcpPort=9999;
- private Socket socket;
- @Override
- public void run() {
- String msg = "ab23567787hdhfhhfy";
- byte[] byteMsg = msg.getBytes();
- try {
- socket = new Socket("127.0.0.1", 9999);
- OutputStream out = socket.getOutputStream();
- InputStream inputStream=socket.getInputStream();
- out.write(byteMsg);
- Thread.sleep(10*1000);
- char[] chars=msg.toCharArray();
- String str="";
- /*out.flush();*/
- for(int i=0;i<msg.length();i++) {
- str=chars[i]+"-"+i;
- out.write(str.getBytes());
- Thread.sleep(1*1000);
- }
- byte[] bytes=new byte[8];
- while(true) {
- if(inputStream.available()>0) {
- if(inputStream.read(bytes)!=-1) {
- System.out.println(new String(bytes));
- }
- }
- Thread.sleep(10*1000);
- }
- } catch (Exception e) {
- e.printStackTrace();
- try {
- socket.close();
- } catch (IOException e2) {
- e2.printStackTrace();
- }
- }
- }
- public static void main(String[] args) {
- new Thread(new SocketClient()).start();
- }
- }
- while(true){
- if(is.available()>0){
- is.read(data);
- }
- }
- if (nRecv < nRecvNeed){
- int nSize = 0;
- wsaBuf=new byte[nRecvNeed-nRecv];
- int readCount = 0; // 已经成功读取的字节的个数
- try {
- while (readCount < wsaBuf.length) {
- //Thread.sleep(100);//读取之前先将线程休眠,避免循环时,程序占用CPU过高
- try {
- availableNum=inputStream.available();
- if(availableNum>0){
- readCount += inputStream.read(wsaBuf, readCount, (wsaBuf.length - readCount));//避免数据读取不完整
- }
- }catch (SocketTimeoutException timeOut){
- System.out.println("读取超时,线程执行休眠操作,2秒后再读取");
- Thread.sleep(2*1000);
- }
- }
- }catch (Exception e){
- System.out.println("读取数据异常");
- e.printStackTrace();
- close();//关闭socket连接
- break;
- }
- nSize=wsaBuf.length;
- nRecv+=nSize;
- }
初识Socket通讯编程(一)的更多相关文章
- 天地币:所用到的 Android Socket 通讯编程技术试验
1.为了开发"天地币"这个Android手机项目,须要用到Socket编程. 2.天地币是一种类似于比特币的虚拟货币. 3.为了赚取CSDN的C币,须要写篇博客. 4.干脆将调试S ...
- 门禁系统socket通讯编程
最近遇到一个socke udp协议通讯的需求,而且是16进制数据接收.这样在传输参数的时候老是提示参数错误,因为计算机是不能直接传输16进制的,会自行转换,所有以下代码非常完美的解决我的问题,同时也让 ...
- 高性能、高可用性Socket通讯库介绍 - 采用完成端口、历时多年调优!(附文件传输程序)
前言 本人从事编程开发十余年,因为工作关系,很早就接触socket通讯编程.常言道:人在压力下,才可能出非凡的成果.我从事的几个项目都涉及到通讯,为我研究通讯提供了平台,也带来了动力.处理socket ...
- TCP网络编程(Socket通讯)
TCP 网路编程: 1.TCP 三次握手: 第一次握手,客户端向服务器端发出连接请求,等待服务器确认. 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求. 第三次握手,客户端再次向服 ...
- [转] C#.Net Socket网络通讯编程总结
1.理解socket1).Socket接口是TCP/IP网络的应用程序接口(API).Socket接口定义了许多函数和例程,程序员可以用它们来开发TCP/IP网络应用程序.Socket可以看成是网络通 ...
- python学习之路---day25( 网络编程基础和初识socket)
基本网络知识和初识socket一:基本知识 网线:传输电信号 集线器:将所有连接到集线器的网络设备连通起来 交换机: 升级版的集线器 网卡:接受电信号 MAC地址:物理地址: 8C-88-4B-88- ...
- 初识Socket通信:基于TCP和UDP协议学习网络编程
学习笔记: 1.基于TCP协议的Socket网络编程: (1)Socket类构造方法:在客户端和服务器端建立连接 Socket s = new Socket(hostName,port);以主机名和端 ...
- 网络通信 & 初识socket
本节主要内容: 1.客户短\服务端架构 2.网络通信的流程 3.初识socket 一.客户端\服务端架构 客户端\服务端架构: 即Client/Server (C/S) 结构,是大家熟知的软件系统体系 ...
- python之Socket网络编程
什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...
随机推荐
- DRF框架之Serializer序列化器的反序列化操作
昨天,我们完成了Serializer序列化器的反序列化操作,那么今天我们就来学习Serializer序列化器的最后一点知识,反序列化操作. 首先,我们定要明确什么是反序列化操作? 反序列化操作:JOS ...
- 全国疫情精准定点动态更新(.net core)
前言 疫情远比我们在年初想的发展迅速,在过年前还计划着可以亲戚聚聚,结果都泡汤了,开始了自家游. 在初三的时候,看到那个丁香医生,觉得不够详细,比如说我想看下周边城市的疫情情况,但是我地理不好,根本不 ...
- C++不同类中的特征标相同的同名函数
转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee 作者按: 从这篇文章中,我们主要会认识到一下几点: ...
- jsp操作mysql样例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- LIBCMTD.lib与libcpmtd冲突的解决方法。
error: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int) ...
- .NET Core WebAPI post参数传递时后端的接收方式
.NET Core WebAPI post参数传递时后端的接收方式 实体类 dynamic动态类型 JObject参数 单值参数(字符串参数) A.前端Post请求代码 $.ajax({ url: & ...
- socket实现文件上传(客户端向服务器端上传照片示例)
本示例在对socket有了基本了解之后,可以实现基本的文件上传.首先先介绍一下目录结构,server_data文件夹是用来存放客户端上传的文件,client_data是模拟客户端文件夹(目的是为了测试 ...
- 蓝桥杯2015年省赛C/C++大学B组
1. 奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其 ...
- Oracle 12C In-Memory特性研究
Oracle 12C In-Memory特性研究一.Oracle In-Memory1.1 In-Memory 开启方法1.2 开启与关闭IM column store1.3 inmemory优先级调 ...
- 一文带你了解 C# DLR 的世界
一文带你了解 C# DLR 的世界 在很久之前,我写了一片文章dynamic结合匿名类型 匿名对象传参,里面我以为DLR内部是用反射实现的.因为那时候是心中想当然的认为只有反射能够在运行时解析对象的成 ...