【java编程】tcp/udp——Socket网络编程部分
2015-02-03 09:44
811 查看
TCP——Socket网络编程部分:
特点:1.tcp是面向连接的,连接时需要三次握手
2.tcp适合传输大数据
3.tcp能保证数据的完整性,传输速度稍慢
构成:1.分为客户端和服务器端
2.客户端建立Socket服务,服务端直接使用客户端建立的Socket服务来完成数据的传输
接下来我们就来用一张图来说明,客户端和服务端的关系吧!
![](https://img-blog.csdn.net/20150203090105647?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvS0ZDS0E=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
客户端配置的一般思路:
1.建立客户端Socket服务,并指定服务器的主机ip地址和端口号
2.如果是上传文件,要先建立相应的读取流
3.得到Socket服务的OutputStream输出流,向服务器上传文件
4.上传完毕后,设置一个标识,让服务器的读取流停下来,一般用socket服务的shutdownOutput方法
5.得到Socket服务的InputStream输入流,得到服务器返回来的信息
6.关闭资源
服务端配置的一般思路:
1.建立服务端Socket服务,指定端口号
2.得到客户端Socket服务
3.建立输出流,用于保存文件
4.得到客户端socket服务字节输入流
5.得到客户端Socket服务字节输出流
6.关闭资源
案例:1.多个用户同时上传图片到服务器上,服务器会返回上传成功
特点:1.一般的图片字节流输入输出
2.设置结束标识
3.为每个用户创建一个线程
4.文件的命名方式
import java.io.*;
import java.net.*;
class PicClient //客户端
{
public static void main(String[] args)
{
if(args.length!=1)
{
System.out.println("请选择一个jpg格式的图片");
return;
}
File file=new File(args[0]);
if(!(file.exists() && file.isFile()))
{
System.out.println("该文件有问题,要么不存在,要么不是文件");
return;
}
if(!file.getName().endsWith("jpg"))
{
System.out.println("文件不是jpg文件");
return;
}
try
{
//建立Socket服务,指定主机地址和端口号
Socket s=new Socket("127.0.0.1",8800);
//建立字节读取流,读取图片
FileInputStream in = new FileInputStream(file);
//得到Socket服务输出流,上传图片
OutputStream out = s.getOutputStream();
//建立缓冲区
byte[] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1)
{
//System.out.println("a");
out.write(buf,0,len);
}
//设置标识符,标记图片已被读取完毕
s.shutdownOutput();
//得到Socket服务输入流,获取服务器传过来的信息
InputStream buIn = s.getInputStream();
byte[] bufIn=new byte[1024];
int num = buIn.read(bufIn);
System.out.println(new String(bufIn,0,num));
in.close();
s.close();
}
catch (IOException e)
{
throw new RuntimeException("操作失败!");
}
}
}
class PicThread implements Runnable //多线程,让每个用户获得一个线程
{
private Socket s;
PicThread(Socket s)
{
this.s=s;
}
public void run()
{
int count=1;
String ip=s.getInetAddress().getHostAddress();
try
{
System.out.println(ip+".......connection");
//创建文件对象,定义文件格式
File file = new File(ip + "("+(count)+")"+".jpg");
while(file.exists())
file=new File(ip + "("+(count++)+")"+".jpg");
//得到Socket服务输入流
InputStream in = s.getInputStream();
//建立字节输出流,保存图片
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len=0;
while((len=in.read(buf))!=-1)
{
fos.write(buf,0,len);
}
//得到Socket服务输出流
OutputStream out = s.getOutputStream();
out.write("上传成功!".getBytes());
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("操作失败");
}
}
}
class PicServer //服务器端
{
public static void main(String[] args)
{
try
{
//建立serverSocket服务
ServerSocket ss=new ServerSocket(8800);
while(true)
{
//得到客户端socket服务
Socket s = ss.accept();
//为用户分配线程
new Thread(new PicThread(s)).start();
}
}
catch (IOException e)
{
throw new RuntimeException("操作失败!");
}
}
}
案例2:上传纯文本到服务器,服务器返回上传成功
特点:1.用字符缓冲区来处理纯文本
2.设置结束标识
-----------------------------------------------------------------------------------------------------------------------------------------
UDP——Socket网络编程部分:
特点:1.udp是面向无连接的,数据包的大小限制在64K内
2.udp是不安全的连接,会产生丢包
3.速度稍快,适合对数据完整性要求不严格的数据传输
构成:1.服务器和客户端分别对应不同的DatagramSocket服务
2.获取信息都要用到DatagramPacket类
特点:1.tcp是面向连接的,连接时需要三次握手
2.tcp适合传输大数据
3.tcp能保证数据的完整性,传输速度稍慢
构成:1.分为客户端和服务器端
2.客户端建立Socket服务,服务端直接使用客户端建立的Socket服务来完成数据的传输
接下来我们就来用一张图来说明,客户端和服务端的关系吧!
客户端配置的一般思路:
1.建立客户端Socket服务,并指定服务器的主机ip地址和端口号
2.如果是上传文件,要先建立相应的读取流
3.得到Socket服务的OutputStream输出流,向服务器上传文件
4.上传完毕后,设置一个标识,让服务器的读取流停下来,一般用socket服务的shutdownOutput方法
5.得到Socket服务的InputStream输入流,得到服务器返回来的信息
6.关闭资源
服务端配置的一般思路:
1.建立服务端Socket服务,指定端口号
2.得到客户端Socket服务
3.建立输出流,用于保存文件
4.得到客户端socket服务字节输入流
5.得到客户端Socket服务字节输出流
6.关闭资源
案例:1.多个用户同时上传图片到服务器上,服务器会返回上传成功
特点:1.一般的图片字节流输入输出
2.设置结束标识
3.为每个用户创建一个线程
4.文件的命名方式
import java.io.*;
import java.net.*;
class PicClient //客户端
{
public static void main(String[] args)
{
if(args.length!=1)
{
System.out.println("请选择一个jpg格式的图片");
return;
}
File file=new File(args[0]);
if(!(file.exists() && file.isFile()))
{
System.out.println("该文件有问题,要么不存在,要么不是文件");
return;
}
if(!file.getName().endsWith("jpg"))
{
System.out.println("文件不是jpg文件");
return;
}
try
{
//建立Socket服务,指定主机地址和端口号
Socket s=new Socket("127.0.0.1",8800);
//建立字节读取流,读取图片
FileInputStream in = new FileInputStream(file);
//得到Socket服务输出流,上传图片
OutputStream out = s.getOutputStream();
//建立缓冲区
byte[] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1)
{
//System.out.println("a");
out.write(buf,0,len);
}
//设置标识符,标记图片已被读取完毕
s.shutdownOutput();
//得到Socket服务输入流,获取服务器传过来的信息
InputStream buIn = s.getInputStream();
byte[] bufIn=new byte[1024];
int num = buIn.read(bufIn);
System.out.println(new String(bufIn,0,num));
in.close();
s.close();
}
catch (IOException e)
{
throw new RuntimeException("操作失败!");
}
}
}
class PicThread implements Runnable //多线程,让每个用户获得一个线程
{
private Socket s;
PicThread(Socket s)
{
this.s=s;
}
public void run()
{
int count=1;
String ip=s.getInetAddress().getHostAddress();
try
{
System.out.println(ip+".......connection");
//创建文件对象,定义文件格式
File file = new File(ip + "("+(count)+")"+".jpg");
while(file.exists())
file=new File(ip + "("+(count++)+")"+".jpg");
//得到Socket服务输入流
InputStream in = s.getInputStream();
//建立字节输出流,保存图片
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len=0;
while((len=in.read(buf))!=-1)
{
fos.write(buf,0,len);
}
//得到Socket服务输出流
OutputStream out = s.getOutputStream();
out.write("上传成功!".getBytes());
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("操作失败");
}
}
}
class PicServer //服务器端
{
public static void main(String[] args)
{
try
{
//建立serverSocket服务
ServerSocket ss=new ServerSocket(8800);
while(true)
{
//得到客户端socket服务
Socket s = ss.accept();
//为用户分配线程
new Thread(new PicThread(s)).start();
}
}
catch (IOException e)
{
throw new RuntimeException("操作失败!");
}
}
}
案例2:上传纯文本到服务器,服务器返回上传成功
特点:1.用字符缓冲区来处理纯文本
2.设置结束标识
import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; class TextClient //客户端 { public static void Main(String[] args) throws UnknownHostException, IOException { //创建Socket服务 Socket s = new Socket("127.0.0.1",8802); //创建输入流 BufferedReader bufr = new BufferedReader(new FileReader("G:\\JavaCode\\transfer.java")); //创建输出打印流(和BufferedWriter相似) PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line=null; while((line=bufr.readLine())!=null) { out.println(line); } //添加文件结束标记 s.shutdownOutput(); //创建输入流与Socket绑定 BufferedReader bufw = new BufferedReader(new InputStreamReader(s.getInputStream())); String data = bufw.readLine(); System.out.println(data); } } class TextServer //服务器端 { public static void Main(Strin 4000 g[] args) throws IOException { //创建ServerSocket服务 ServerSocket ss = new ServerSocket(8802); //得到客户端Socket服务 Socket s = ss.accept(); //创建输入流与Socket绑定 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //创建打印输出流,将读到的数据写到文件中 PrintWriter out = new PrintWriter(new FileWriter("G:\\server.txt"),true); String line=null; while((line=bufIn.readLine())!=null) { out.println(line); } //创建输出流与Socket绑定 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("上传成功!"); } }
-----------------------------------------------------------------------------------------------------------------------------------------
UDP——Socket网络编程部分:
特点:1.udp是面向无连接的,数据包的大小限制在64K内
2.udp是不安全的连接,会产生丢包
3.速度稍快,适合对数据完整性要求不严格的数据传输
构成:1.服务器和客户端分别对应不同的DatagramSocket服务
2.获取信息都要用到DatagramPacket类
相关文章推荐
- java网络编程基础夯实06-TCP,UDP,HTTP,Socket简介
- Java网络编程,Socket,ServerSocket使用,TCP,UDP的异同
- Java基础 网络编程 Socket UDP TCP URL
- 初识Java TCP/IP Socket-UDP网络编程知识
- java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
- Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
- Java网络编程的知识点 Socket TCP UDP
- 黑马程序员--10.网络编程--02.【网络传输三要素在Java中的体现】【TCP和UDP概念】【Socket基本概念】
- java网络编程(一) socket方式TCP和Datagram的UDP
- JAVA网络编程入门的两个demo(TCP+UDP)
- java网络编程 UDP编程 Socket编程
- Java---Socket编程UDP/TCP
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- java 网络编程 Tcp和UDP 的使用
- Java 网络编程 TCP vs UDP
- Java网络编程:TCP和UDP
- [转载]在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分 .
- java 网络编程 [网络传输] [协议] [UDP与TCP] [套接字] [URL与URI]