UDP(短连接)---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
TCP(长连接)---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
下面介绍一下将要实现的功能UDP向TCP之间的做的转发:
整体效果如下:
接下来各个类的代码如下:
Main类的代码如下:
package com.hisoft.netty;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.SynchronousQueue;
import com.hisoft.netty.change.Changer;
import com.hisoft.netty.change.ChangerImpl;
import com.hisoft.transfer.Transfer;
public class Main
{
static Transfer tran;
static ExecutorService es = Executors.newSingleThreadExecutor();
static BlockingQueue<String> q1 = new SynchronousQueue();
static BlockingQueue<String> q2 = new SynchronousQueue();
static Changer changer;
public static void main(String[] args)
{
changer = new ChangerImpl();
tran = new Transfer(q1, q2, changer);
Future future = es.submit(new Callable()
{
public Object call() {
new View(Main.q2, Main.q1);
return Boolean.valueOf(true);
} } );
try {
future.get();
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (ExecutionException e1) {
e1.printStackTrace();
}
}
}
Util类的代码如下:
package com.hisoft.netty;
public class Util
{
public static String bytesToHexString(byte[] src)
{
StringBuilder stringBuilder = new StringBuilder("");
if ((src == null) || (src.length &l