Socket 通信

1.UDP实现  (DatagramSocket)

【客户端】

//首先创建一个DatagramSocket对象

DatagramSocket socket = new DatagramSocket(4567);

//创建一个InetAddress

InetAddress serverAddress = InetAddress.getByName("192.168.1.104");

String str = "hello";

//这是要传输的数据 byte data [] = str.getBytes();

//把传输内容分解成字节

//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号

DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);

//调用socket对象的send方法,发送数据

socket.send(packet);

【服务器端】

//创建一个DatagramSocket对象,并指定监听的端口号

DatagramSocket socket = new DatagramSocket(4567);

byte data [] = new byte[1024];

//创建一个空的DatagramPacket对象

DatagramPacket packet = new DatagramPacket(data,data.length);

//使用receive方法接收客户端所发送的数据,

//如果客户端没有发送数据,该进程就停滞在这里

socket.receive(packet);

String result = new String(packet.getData(),packet.getOffset(),packet.getLength());

2.TCP通信

【客户端】

创建一Socket对象并指明服务器端的IP及端口号

Socket socket = new Socket("192.168.1.0",45678);

//向服务器发送消息

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

out.println(message);

//从服务器接收消息

BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String rString = is.readLine().toString();

【服务器端】

//创建一个ServerSocket对象,并让这个Socket在45678端口监听

serverSocket = new ServerSocket(45678);

//调用ServerSocket的accept()方法,接受客户端所发送的请求,

//如果客户端没有发送数据,那么该线程就停滞不继续

Socket socket = serverSocket.accept();

//从Socket当中得到InputStream对象

InputStream inputStream = socket.getInputStream();

byte buffer [] = new byte[1024*4];

int temp = 0;

//从InputStream当中读取客户端所发送的数据

while((temp = inputStream.read(buffer)) != -1) {

String str = new String(buffer,0,temp);

//接下来可以对从客户端接收到的消息做处理

}

【Socket获取客户端IP地址及端口号】

Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一    是返回EndPoint对象的RemoteEndPoint属性。

EndPoint类本身是抽象的,要想收集有用的信息,需·要把    EndPoint强制类型转换为IPEndPoint对象。

IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:

TcpListener tcpl=new TcpListener(port);

Socket s=tcpl.AcceptSocket();

label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();

label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();

最新文章

  1. Android实现TCP断点上传,后台C#服务实现接收
  2. iOS 私有变量 私有方法
  3. ASP.NET Core--条件处理程序中的依赖注入
  4. Oracle中的自动增长字段
  5. DDD领域驱动设计之运用层代码
  6. PL/SQL之--变量
  7. 大型网站技术架构介绍--squid
  8. Java1.8.0_05 环境配置
  9. ios 入门之Hello World
  10. 【iOS 7】使用UIScreenEdgePanGestureRecognizer实现swipe to pop效果
  11. 百度地图API地址转换成经纬度
  12. 【转】nand flash坏块管理OOB,BBT,ECC
  13. JavaScript之共享onload
  14. 都是Javascript的作用域惹得祸
  15. [转载] Solr使用入门指南
  16. log4j日志记录级别是如何工作?
  17. Centos7 安装mysql-8.0.13(rpm)
  18. 11.9luffycity(4)
  19. Java面试集合(三)
  20. sass和scss的区别

热门文章

  1. ios 中UIViewController的分类
  2. iOS No matching provisioning profile found for "Applicartion/xxx.app"的解决方案
  3. Swift3.0 - 实现剪切板代码拷贝及跨应用粘贴
  4. excel中的数据粘贴不全到plsql中,excel 粘贴后空白,Excel复制粘贴内容不全
  5. Linux 操作MySQL常用命令行(转)
  6. 树莓派进阶之路 (006) - 树莓派安装wiringPi
  7. 安卓高手之路之ClassLoader(三)
  8. XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
  9. KnockoutJs学习笔记
  10. Objective-C 资源收藏