TCP、UDP网络通信
IP地址和端口号
端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,其中,0~1023之间的端口号用于一些知名的网络服务和应用,
用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。
InetAddress
常用方法

代码演示:
public static void main(String[] args) throws UnknownHostException {
//InetAddress inet=InetAddress.getLocalHost();
//主机名+ip地址
InetAddress inet=InetAddress.getByName("DESKTOP-KCD8G34");
System.out.println(inet);
String host=inet.getHostName();
String ip=inet.getHostAddress();
System.out.println(host+"..."+ip);
}
UDP通信
DatagramPacket



DatagramSocket



UDP网络程序

代码演示:
//发送端
public class UDPSend {
public static void main(String[] args) throws IOException {
//1.打包
//明确数据
byte[] bytes="你好吗".getBytes();
//明确目的地的IP地址
InetAddress inet=InetAddress.getByName("127.0.0.1");
//装包
DatagramPacket dp=new DatagramPacket(bytes, bytes.length,inet,8888);
//2.创建快递公司
DatagramSocket ds=new DatagramSocket();
//3.发送
ds.send(dp);
//4.释放资源
ds.close();
} }
//接收端
public class UDPReceive {
public static void main(String[] args) throws IOException {
//明确端口号
DatagramSocket ds=new DatagramSocket(8888);
//创建接收数据的字节数组
byte[] bytes=new byte[1024];
//创建接收的数据包
DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
//接收
ds.receive(dp);
//获取接收包上的数据
int length=dp.getLength();
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
System.out.println("ip地址为:"+ip+"端口号为:"+port+"发送的内容为:"+new String(bytes,0,length));
//释放资源
ds.close();
} }
TCP通信
一个是ServerSocket类,用于表示服务器端,一个是Socket类,用于表示客户端。
ServerSocket


Socket


|
方法声明 |
功能描述 |
|
int getPort() |
该方法返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号 |
|
InetAddress getLocalAddress() |
该方法用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回 |
|
void close() |
该方法用于关闭Socket连接,结束本次通信。在关闭socket之前,应将与socket相关的所有的输入/输出流全部关闭,这是因为一个良好的程序应该在执行完毕时释放所有的资源 |
|
InputStream getInputStream() |
该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据 |
|
OutputStream getOutputStream() |
该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据 |
图解:

代码演示:
//发送端
public class UDPSend {
public static void main(String[] args) throws IOException {
//1.打包
//明确数据
Scanner sc=new Scanner(System.in);
//明确目的地的IP地址
InetAddress inet=InetAddress.getByName("192.168.1.171");
//2.创建快递公司
DatagramSocket ds=new DatagramSocket();
while(true){
String mes=sc.next();
byte[] bytes=mes.getBytes();
//装包
DatagramPacket dp=new DatagramPacket(bytes, bytes.length,inet,6666);
//3.发送
ds.send(dp);
}
//4.释放资源
//ds.close(); }
//接收端
public class UDPReceive {
public static void main(String[] args) throws IOException {
//明确端口号
DatagramSocket ds=new DatagramSocket(8888);
//创建接收数据的字节数组
byte[] bytes=new byte[1024];
//创建接收的数据包
while(true){
DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
//接收
ds.receive(dp);
//获取接收包上的数据
int length=dp.getLength();//明确发送的字节长度
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
System.out.println("ip地址为:"+ip+"端口号为:"+port+"发送的内容为:"
+new String(bytes,0,length));
}
}
//服务器端
public class TCPServer {
public static void main(String[] args) throws IOException {
//创建服务器套接字
ServerSocket server=new ServerSocket(7777);
//调用accept方法与客户端创建链接
Socket socket=server.accept();
InputStream in=socket.getInputStream();
byte[] bytes=new byte[1024];
int len=in.read(bytes);
System.out.println(new String(bytes,0,len));
//服务器给客户端回复
OutputStream out=socket.getOutputStream();
out.write("收到!over!".getBytes()); server.close();
}
//客户端
public class TCPCLient {
public static void main(String[] args) throws IOException {
//1.创建Socket对象,连接服务器
Socket socket=new Socket("127.0.0.1",7777);
//2.通过客户端套接字对象Socket对象中的获取字节输出流的方法
OutputStream out=socket.getOutputStream();
//3.将数据写向服务器
out.write("服务器你好".getBytes());
//接收服务器端的回复
InputStream in=socket.getInputStream();
byte[] bytes=new byte[1024];
int len=in.read(bytes);
System.out.println(new String(bytes, 0, len));
//释放资源
socket.close();
}
文件上传案例

代码演示:
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(5555);
Socket socket=server.accept();
//明确数据源
InputStream in=socket.getInputStream();
//明确目的地
File file=new File("x:\\upload");
if(!file.exists()){
file.mkdirs();
}
//域名+毫秒值
String filename="oracle"+System.currentTimeMillis()+".jpg";
FileOutputStream fos=new FileOutputStream(file+File.separator+filename);
//复制
int len=0;
byte[] bytes=new byte[1024];
while((len=in.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//回复客户端
OutputStream out=socket.getOutputStream();
out.write("上传成功!".getBytes());
//释放资源
server.close();
fos.close();
}
}
public class TCPClinet {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("192.168.1.171",7000);
OutputStream out=socket.getOutputStream();
//明确数据源
FileInputStream fis=new FileInputStream("x:\\test\\img1.jpg");
int len=0;
byte[] bytes=new byte[1024];
//文件复制
while((len=fis.read(bytes))!=-1){
out.write(bytes,0,len);
}
//告诉服务器端不要在读了到末尾了
socket.shutdownOutput();
//服务器端回复
InputStream in=socket.getInputStream();
len=in.read(bytes);
System.out.println(new String(bytes, 0, len));
//释放资源
fis.close();
socket.close();
}
}
文件上传案例多线程版本

代码演示:
public class Demo {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(6000);
while(true){
Socket socket=server.accept();
new Thread(new Upload(socket)).start();
}
}
}
public class Upload implements Runnable{
private Socket socket;
public Upload(Socket socket){
this.socket=socket;
}
public void run() {
//明确数据源
FileOutputStream fos=null;
try {
InputStream in= socket.getInputStream();
//明确目的地
File file=new File("x:\\upload");
if(!file.exists()){
file.mkdirs();
}
//域名+毫秒值
String filename="oracle"+System.currentTimeMillis()+".jpg";
fos=new FileOutputStream(file+File.separator+filename);
//复制
int len=0;
byte[] bytes=new byte[1024];
while((len=in.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//回复客户端
OutputStream out=socket.getOutputStream();
out.write("上传成功!".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally{
//释放资源
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TCP、UDP网络通信的更多相关文章
- Java中的TCP/UDP网络通信编程
127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户 ...
- Java TCP/UDP网络通信编程
本文转自:http://www.cnblogs.com/cdtarena/archive/2013/04/10/3012282.html 网络应用中基本上都是TCP(Transmission Cont ...
- UC编程之网络通信(TCP/UDP)
网络常识 OSI 7层模型(人机交互) 物理层.数据链路层.网络层.传输层.会话层.表现层.应用层 常见协议: tcp/udp/ip/ftp/http... IP地址--就是计算机在网络中的地址,是一 ...
- Java 网络通信(TCP/UDP)
1.InetAdress类 与 Socket类 >InetAdress >Socket 2.TCP/IP协议簇 客户端: 创建 Socket:根据指定服务端的 IP 地址或端口号构 ...
- 开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等
开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等 C++开发网络通信程序时用asio是个不错的选择 ...
- HP-SOCKET TCP/UDP通信框架库解析
项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- HTTP,FTP,TCP,UDP及SOCKET
一.TCP/IP协议简析TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层:网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议传输层:TCP协议与UDP协议应用层:F ...
- SOCKET,TCP/UDP,HTTP,FTP
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- [网络] SOCKET, TCP/UDP, HTTP, FTP
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- TCP/UDP简介
TCP/UDP简介 Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接 ...
随机推荐
- 《大道至简》第一章--编程的精意 读后感(JAVA伪代码)
1. /*愚公移山 原始需求:惩山北之塞,出入之迂: 项目沟通:聚室而谋曰: 项目目标:毕力平险,指通豫南,达于汉阴: 技术方案:扣石垦壤,箕畚运于渤海之尾: 人员构成:愚公率子孙荷担者三夫,邻人京城 ...
- PAT 1031 查验身份证(15)(C++&Python)
1031 查验身份证(15)(15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8, ...
- andorid 网格视图GridView
.xml <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android=&qu ...
- guide dpdk
Welcome to DPDK Guide! Contents: Setting up DPDK Important Prerequisites Setting up repositories Red ...
- Tinyos学习笔记(三)
读取Telosb内部传感器数据,并在计算机上显示. senseC.nc代码如下: #include "Timer.h" #include "sense.h" # ...
- Laravel 5.5 + Vue 开发单页应用
上次我用 laravel5.3 + Vue 开发了一个简单的单页应用,这次我打算将其升级到 laravel5.5,在升级的过程中,做一下记录,其源码放在 github 上面,源码地址 开发环境 软 ...
- 在ListView中添加EditText丢失光标问题解决
<ListView android:id="@android:id/list" android:layout_height="fill_parent& ...
- 将hibernate框架融入到spring框架中
第一步:首先创建表: create table user( id int(2) primary key,name varchar(20),password varchar(20)); 第二步:建立d ...
- 【搜索】 Prime Path
#include<cstdio> #include<cstring> #include<cmath> #include<queue> #include& ...
- [html]Sublime Text添加插件
今天想在Sublime Text(简称ST)内编写HTML后直接使用浏览器看效果,想添加View in Browser插件,然后遇到奇怪的问题添加插件直接报"找不到有用的插件" 一 ...