java socket send_java socket编程

TcpServer

Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:

1. 构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。

2. 调用socket的accept()方法来获得下面客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。

3.通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。

4.结束的时候调用socket实例的close()方法关闭socket连接。

packagesocket;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Reader;importjava.net.ServerSocket;importjava.net.Socket;public classServer {public static void main(String args[]) throwsIOException {//为了简单起见,所有的异常信息都往外抛

int port = 8899;//定义一个ServerSocket监听在端口8899上

ServerSocket server = newServerSocket(port);//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket =server.accept();//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Reader reader = newInputStreamReader(socket.getInputStream());char chars[] = new char[64];intlen;

StringBuilder sb= newStringBuilder();while ((len=reader.read(chars)) != -1) {

sb.append(new String(chars, 0, len));

}

System.out.println("from client: " +sb);

reader.close();

socket.close();

server.close();

}

}

TcpClient端

客户端的请求过程稍微有点不一样:

1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接。

2.通过Socket实例包含的InputStream和OutputStream来进行数据的读写。

3.操作结束后调用socket实例的close方法,关闭。

packagesocket;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.net.Socket;public classClient {public static void main(String args[]) throwsException {//为了简单起见,所有的异常都直接往外抛

String host = "10.21.23.144"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口//与服务端建立连接

Socket client = newSocket(host, port);//建立连接后就可以往服务端写数据了

Writer writer = newOutputStreamWriter(client.getOutputStream());

writer.write("Hello mynona Server.");

writer.flush();//写完后要记得flush

writer.close();

client.close();

}

}

Udp:

server端

因为UDP协议不需要建立连接,它的过程如下:

1. 构造DatagramSocket实例,指定本地端口。

2. 通过DatagramSocket实例的receive方法接收DatagramPacket.DatagramPacket中间就包含了通信的内容。

3. 通过DatagramSocket的send和receive方法来收和发DatagramPacket.

packageUdp2;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classUDPServer {public static void main(String args[]) throwsException

{//监听9876端口

DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];byte[] sendData = new byte[1024];while(true)

{//构造数据包接收数据

DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);//接收数据

serverSocket.receive(receivePacket);//解析数据

String sentence = newString( receivePacket.getData());

System.out.println("RECEIVED: " +sentence);

InetAddress IPAddress=receivePacket.getAddress();int port =receivePacket.getPort();

String capitalizedSentence=sentence.toUpperCase();

sendData=capitalizedSentence.getBytes();//构造发送数据包发送数据

DatagramPacket sendPacket = newDatagramPacket(sendData, sendData.length, IPAddress, port);

serverSocket.send(sendPacket);

}

}

}

UdpClient:

1. 构造DatagramSocket实例。

2.通过DatagramSocket实例的send和receive方法发送DatagramPacket报文。

3.结束后,调用DatagramSocket的close方法关闭。

packageUdp2;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classUDPClient {public static void main(String args[]) throwsException

{

BufferedReader inFromUser=

new BufferedReader(newInputStreamReader(System.in));

DatagramSocket clientSocket= newDatagramSocket();

InetAddress IPAddress= InetAddress.getByName("localhost");

System.out.println("IPAddress:" +IPAddress);byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];

String sentence=inFromUser.readLine();

sendData=sentence.getBytes();//发送数据

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);

clientSocket.send(sendPacket);//接收数据

DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);

clientSocket.receive(receivePacket);

String modifiedSentence= newString(receivePacket.getData());

System.out.println("FROM SERVER:" +modifiedSentence);

clientSocket.close();

}

}

参考来源:http://shmilyaw-hotmail-com.iteye.com/blog/1556187

http://haohaoxuexi.iteye.com/blog/1979837

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#来创建和读取XML文档 [转]

C#来创建和读取XML文档【关键词】:XML 录入:小鱼之家 来源:http://fisher.xundain.com 时间:2005-3-3 23:41:54 点击:85次 扩展标记语言XML(eXtensible Markup Language)&#xff0…

如何成功搞垮一个团队?

阅读本文大概需要3分钟。最近好几个读者聊到是否能写一些怎么带团队的文章,在互联网职场中,升职带团队被大部分职场人视为职业生涯的重大转折点。一方面,升职意味着更丰厚的待遇,另一方面,带团队意味着自己大小变成了一…

Python学习第一天

干程序这行比较辛苦的就是要随时更新自己的知识。闷~~为了让自己能够更加深入的学习GUN和LINUX。在简单了解了shell以后决定学习Python。--------&#xff0d…

WinForm捕获全局异常(捕获未处理的异常)

背景我们在做WinForm程序的时候,一般都是对异常进行处理,但是,我们要防止不小心出现未知异常,导致软件崩溃。也可采集系统未知的异常信息,防止出现异常,也无法下手。于是就有了如这篇文章标题所述的一个简单…

it's so cold

今晚值日,本来中午不冷的,就换了衬衫,结果傍晚的时候就很凉,吃过晚饭只好回去换了件秋天的棉衫。但晚上我值日的那个地方风很大,熬了一节课,下课学生来打乒乓,借了件他们的校服穿,结…

java 继承 冒号_java继承(extends)简单介绍

继承相信很多人都有听说过,继承是面向对象的三个基本特征之一,下面的话就一起通过简单的文章来对java继承进行一下了解吧。继承和现实生活中的“继承”的相似之处是保留一些父辈的特性,从而减少代码冗余,提高程序运行效率。Java中…

如何在 ASP.NET Core 中写出更干净的 Controller

你可以遵循一些最佳实践来写出更干净的 Controller,一般我们称这种方法写出来的 Controller 为瘦Controller,瘦 Controller 的好处在于拥有更少的代码,更加单一的职责,也便于阅读和维护,而且随着时间的推移也容易做 Co…

探索 .NET团队对API的设计流程

原文作者:steve gordon 原文链接: https://www.stevejgordon.co.uk/how-are-dotnet-apis-designed在这篇文章中,我想介绍一些我觉得非常有趣的东西,.NET 团队是如何设计API的?我们先来看下.NET团队面临的有哪些挑战,您…

静态页面的值传递

1两窗口之间存在着关系.父窗口parent.htm打开子窗口son.htm子窗口可以通过window.opener指向父窗口.这样可以访问父窗口的对象. 优点:取值方便.只要window.opener指向父窗口,就可以访问所有对象. 不仅可以访问值,还可以访问父窗口的方法.值长度无限制.缺点:两窗口要存在着…

java类同步_Java中方法,对象,类的同步

关于在多线程环境中使用同步,我需要一些澄清.我在下面有一个小例子类.但我实际上发现很难做出以下内容如何工作的测试用例;我想要测试用例的原因是要了解同步如何处理这些不同的场景>如果一个线程调用SharedResource.staticMethod,它将获取该类的锁.它是否意味着一个SharedR…

ocelot 中间件的变化

ocelot 中间件的变化Intro之前我们使用 ocelot 的时候自定义了一些中间件来实现我们定制化的一些需求,最近博客园上有小伙伴问我怎么使用,他用的版本是 16.0 版本,16.0 和 17.0 版本的差异不是特别大,就以 17.0 版本为例看一下 oc…

mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值

前言:今天无意在mapper文件中看到useGeneratedKeys这个词,好奇就查了下,发现能解决我之前插入有外键表数据时,这个外键获取繁琐的问题,于是学习敲DEMO记录在项目中经常需要获取到插入数据的主键来保障后续操作&#xf…

Istio 知多少 | 下一代微服务的守护者

1. 引言在写完eShopOnContainers 知多少[12]:Envoy gateways后,就一直想进一步探索Service Mesh,最近刚在极客时间上学完《Service Mesh入门》,又大致浏览了一遍官方文档,对Istio也算有了基本的认识。下面就根据自己的…

微软家也会出错

下图是2006年2月8日微软WebCast首页的截图转载于:https://www.cnblogs.com/mssite/archive/2006/02/08/327130.html

mysql 基础视图_MySQL基础(4) | 视图

MySQL基础(4) | 视图基本语法1.创建CREATE VIEW AS 语法说明如下。:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。对于创建视图中的 SELEC…

C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项

在 2020 年的最后一天,博客园发起了一个开源项目:基于 .NET 的博客引擎 fluss,我抽空把源码下载下来看了下,发现在属性的定义中,有很多地方都用到了 null!,如下图所示:这是什么用法呢&#xff1…

[转]不找情人的七种理由(献给已婚的男人)

献给已婚的男人不找情人的七种理由   好像有个曾一度风靡的短信,“结婚是错误,离婚是觉悟,婚外恋是醒悟,再婚是执迷不悟,没有情人是废物,情人太多是动物。”咱不怕犯错误,可没办法不当废物,三十好几还没混上个情人,想起来就惭…

无法初始化java类_myeclip运行java程序不能初始化类 NoClassDefFoundError

引用 3 楼 Menglinyang 的回复:是就这个项目有问题还是所有的都是这样?package cn.itcast.utils;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.…

C#学习笔记(十四):StatusBar控件

状态栏控件StatusBar<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />StatusBar的一些常用属性&#xff1a;名称可用性描述BackgroundImage读写可以给状态栏赋予一个图像&#xff0c;显示在背景上。Panels只读这是状态栏上的面板…

微前端架构在容器平台的应用

源宝导读&#xff1a;随着业务的发展&#xff0c;天际-星舟平台未来需要解决与其他云共创共建&#xff0c;跨团队高效协作等诸多问题&#xff0c;而星舟现有的技术架构将难以支撑。本文将介绍星舟平台如何通过向更先进的“微前端”架构演进落地&#xff0c;以应对将来快速增长的…