网络编程- /*
- TCP:客户端(Client)首先与服务端(Server)建立连接,形成通道(即IO流),
- 然后数据可以在通道之间进行传输,并且单个Server端可以同时与多个Client通信
- Socket:建立客户端
- ServerSocket:建立服务器端
- TCP客户端:客户端需要明确服务器端的ip地址和端口号,才能尝试建立连接,如果连接失败,
- 会出现异常。
- 连接成功,则通道Socket建立,可以通过IO流,进行数据传输,Socket提供了输入和输出流,
- 可通过方法 getInputStream() getOutputStream()获取
-
- 与服务器通讯结束后,要关闭Socket
- TCP服务器端:
- 服务器需要明确它所接收的数据是从哪个端口进入的。
- 当有客户端访问是,要明确是哪个客户端,可通过 accept()获取已连接的客户端对象,并
- 通过该对象与客户端通过IO流进行数据数据传输。
- 当该客户端访问结束,关闭该客户端。
-
-
- */
- /*练习:TCP通讯演示,客户端发送消息,服务器收到消息后,回复一条消息*/
- import java.io.*;
- import java.net.*;
- class ClientDemo
- {
- public static void main(String[] args) throws Exception
- {
- //1 建立Soket,连接服务器地址和端口
- Socket socket = new Socket("192.168.31.1",10002);
- // Socket socket = new Socket(InetAddress.getByName("192.168.31.1"),10002);
-
- //2 获取Socket输出流
- OutputStream out = socket.getOutputStream();
- //3 使用输出流 将指定数据写出去
- //与UDP不同,发送的数据不需要封装到包中
- out.write("Hello TCP!!".getBytes());
- out.flush(); //刷新数据流
- //4 获取Socket输入流,接收返回想信息
- InputStream in = socket.getInputStream();
- byte[] bufin = new byte[1024];
-
- int len = in.read(bufin);//获取返回数据长度
- String msg = new String(bufin,0,len);
- String ip = socket.getInetAddress().getHostName();
- String name = socket.getInetAddress().getHostAddress();
- System.out.println(ip+":"+msg);
- //5 关闭连接
- socket.close();
- }
- }
- class ServerDemo
- {
- public static void main(String[] a) throws Exception
- {
- //1 建立ServerSocket,获取客户端的连接
- ServerSocket ss = new ServerSocket(10002);//需要明确监听端口
-
- //2 获取Socket 的IO 流
- Socket s = ss.accept();
- InputStream in = s.getInputStream();
- OutputStream out = s.getOutputStream();
- //3 接收客户端信息
- byte[] buf = new byte[1024];
- int len = in.read(buf);
- String msg = new String(buf,0,len);
-
- //获取客户端地址
- String ip = s.getInetAddress().getHostAddress();
- System.out.println("Client::"+ip+"::"+msg);
- //4 回复消息
- out.write("消息收到!!".getBytes());
- out.flush();
- //5 关闭连接
- s.close();
- }
- }
复制代码
|
|