请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

houcx

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2090|回复: 1

java网络编程基础:TCP

[复制链接]

235

主题

237

帖子

1189

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1189
发表于 2015-8-3 15:36:37 | 显示全部楼层 |阅读模式
1、TCP特点
    Transmission Control Protocol 传输控制协议
    面向连接,通过三次握手建立连接,可靠的协议
    有明确的客户端和服务器端
    一旦连接可以将数据当做一个双向字节流进行交换,开销大
2、相关类
Socket客户端Socket服务类
ServerSocket服务器端Socket服务类
3、TCP传输示例代码
  1.     // 客户端
  2.                                 public class Client {

  3.                                         public static void main(String[] args) throws IOException {

  4.                                                 // 1:使用Socket对象,创建客户端Socket服务
  5.                                                 Socket socket = new Socket("127.0.0.1", 20000);

  6.                                                 // 2:通过连接建立数据传输通道,通过Socket对象可以获得通道中的输入输出流对象
  7.                                                 OutputStream out = socket.getOutputStream();
  8.                                                 InputStream in = socket.getInputStream();

  9.                                                 // 3:使用输入输出流,读写数据
  10.                                                 out.write("Hello World".getBytes());

  11.                                                 byte[] b = new byte[1024];
  12.                                                 int length = in.read(b);
  13.                                                 String message = new String(b, 0, length);
  14.                                                 System.out.println(message);

  15.                                                 // 4:关闭Socket服务
  16.                                                 socket.close();
  17.                                         }
  18.                                 }
  19.                                 // 服务器端
  20.                                 public class Server {

  21.                                         public static void main(String[] args) throws IOException {
  22.                                                
  23.                                                 // 1:通过ServerSocket对象,创建服务器端Socket服务,必须设置端口号
  24.                                                 ServerSocket server = new ServerSocket(20000);

  25.                                                 // 2:获取连接的客户端的Socket对象,accept是阻塞方法
  26.                                                 Socket socket = server.accept();

  27.                                                 // 3:通过Socket对象获得输入输出流进行读写数据
  28.                                                 InputStream in = socket.getInputStream();
  29.                                                 OutputStream out = socket.getOutputStream();

  30.                                                 byte[] b = new byte[1024];
  31.                                                 int length = in.read(b);
  32.                                                 String message = new String(b, 0, length);
  33.                                                 System.out.println(message);

  34.                                                 out.write("收到".getBytes());

  35.                                                 // 4:关闭客户端、服务器端的服务
  36.                                                 socket.close();
  37.                                                 server.close();
  38.                                         }
  39.                                 }
复制代码
  注意,阻塞式方法需要结束标记,否则容易造成双方同时等待可以通过Socket.shutdownInput(),Socket.shutdownOutput()通知对方.

4、实现文件上传
  1.     // 客户端
  2.                                 public class UploadClient {

  3.                                         public static void main(String[] args) throws Exception {

  4.                                                 // 建立Socket服务
  5.                                                 Socket socket = new Socket("192.168.1.100", 20000);

  6.                                                 // 建立文件及流对象
  7.                                                 File file = new File("src/com/net/upload/a.jpg");
  8.                                                 FileInputStream fis = new FileInputStream(file);
  9.                                                 OutputStream out = socket.getOutputStream();

  10.                                                 // 通过流上传文件
  11.                                                 byte[] bur = new byte[1024];
  12.                                                 int length = 0;
  13.                                                 while ((length = fis.read(bur)) != -1) {
  14.                                                         out.write(bur, 0, length);
  15.                                                 }
  16.                                                 fis.close();

  17.                                                 // 发送完毕,关闭Socket的输出流
  18.                                                 socket.shutdownOutput();

  19.                                                 // 接收结束信息
  20.                                                 InputStream in = socket.getInputStream();
  21.                                                 byte[] message = new byte[1024];
  22.                                                 length = in.read(message);
  23.                                                 System.out.println(new String(message, 0, length));

  24.                                                 // 关闭Socket服务
  25.                                                 socket.close();
  26.                                         }
  27.                                 }

  28.                                 // 服务器端
  29.                                 public class UploadServer {

  30.                                         public static void main(String[] args) throws IOException {

  31.                                                 ServerSocket server = new ServerSocket(20000);
  32.                                                 while (true) {
  33.                                                         Socket socket = server.accept();
  34.                                                         new Thread(new Upload(socket)).start();
  35.                                                 }
  36.                                         }
  37.                                 }

  38.                                 // 上传任务类
  39.                                 class Upload implements Runnable {

  40.                                         private Socket socket;

  41.                                         public Upload(Socket socket) {
  42.                                                 this.socket = socket;
  43.                                         }

  44.                                         @Override
  45.                                         public void run() {
  46.                                                 try {

  47.                                                         String ip = socket.getInetAddress().getHostAddress();

  48.                                                         // 建立文件及流对象
  49.                                                         InputStream in = socket.getInputStream();
  50.                                                         File file = new File("src/com/net/upload/" + ip + "a.jpg");
  51.                                                         FileOutputStream fos = new FileOutputStream(file);

  52.                                                         // 接收文件
  53.                                                         byte[] bur = new byte[1024];
  54.                                                         int length = 0;
  55.                                                         while ((length = in.read(bur)) != -1) {
  56.                                                                 fos.write(bur, 0, length);
  57.                                                         }
  58.                                                         fos.close();

  59.                                                         // 向客户端返回上传完毕消息
  60.                                                         OutputStream out = socket.getOutputStream();
  61.                                                         out.write("上传完毕".getBytes());

  62.                                                         // 关闭Socket服务
  63.                                                         socket.close();
  64.                                                 } catch (IOException e) {
  65.                                                         e.printStackTrace();
  66.                                                 }
  67.                                         }
  68.                                 }
复制代码
来自:http://xiao1zhao2.iteye.com/blog/2232182

回复

使用道具 举报

0

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2015-8-3 16:11:06 来自手机 | 显示全部楼层
感谢分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|houcx ( 京ICP备15004793号  

GMT+8, 2019-9-20 20:18 , Processed in 0.066149 second(s), 28 queries .

Powered by houcx! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表