黑马程序员_网络编程之TCP

------- android培训java培训、期待与您交流! ----------

TCP传输:两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入。

 

tcp的两个端点:一个是客户端,一个是服务端。

客户端:对应的对象,Socket

服务端:对应的对象,ServerSocket

 

TCP客户端:

1,建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。

2,如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。

3,关闭资源。

TCP服务端:

1,创建服务端socket服务,并监听一个端口。

2,服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象。

3,可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。

4,如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。

练习:

package com.itheima;
/**
 * 需求:使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
 * 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
 * @author 冯国强
 *
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器
 * @author 冯国强
 *
 */
public class Server {

 public static void main(String[] args) throws Exception{
  // TODO Auto-generated method stub
  ServerSocket serverSocket = new ServerSocket(8888);
        while (true) {
                final Socket socket = serverSocket.accept();
                new Thread(){
                        public void run() {
                                try {
                                        String ip = socket.getInetAddress().getHostAddress();
                                        int port = socket.getPort();
                                       
                                        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                        PrintStream ps = new PrintStream(socket.getOutputStream());
                                       
                                        String s = br.readLine();                                                        // 读取到的一行字符串
                                        System.out.println(ip + ":" + port + ": " + s);                // 打印
                                        ps.println(new StringBuilder(s).reverse());                        // 反转, 发回去
                                       
                                        socket.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }.start();
        }
 }

}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * 客户端
 * @author 冯国强
 *
 */
public class Client {

 public static void main(String[] args) throws Exception,IOException{
  // TODO Auto-generated method stub
   Socket socket = new Socket("192.168.0.107", 8888);
        
         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
         PrintStream ps = new PrintStream(socket.getOutputStream());
         Scanner scanner = new Scanner(System.in);
        
         System.out.println("请输入一个字符串:");
         ps.println(scanner.nextLine());                                // 从键盘读取一行字符串, 发送
         System.out.println(br.readLine());                        // 从服务端读取一行字符串, 打印
        
         socket.close();
         scanner.close();
 }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值