package com.yyq;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* tcp传输
* 1,tcp分为客户端和服务端
* 2,客户端对应的对象是socket
* 服务器端对性的对象是serversocket
*/
/*
* 客户端 : 该对象socket建立是,就可以去连接指定主机
* 因为tcp是面向连接的,所以在建立socket服务时,就要有
* 服务端存在,并连接成功,形成通路后,再该通道进行数据的传输。
*
*/
/*
* 步骤: 1,创建Socket服务,并指定要连接的主机和端口
*/
public class TcpClient {
public static void main(String[] args) throws Exception, IOException {
//创建客户端的socket程序,指定目的主机和端口
System.out.println(InetAddress.getLocalHost());
Socket s = new Socket(InetAddress.getLocalHost(),12345);
// 如果该步成功了,通路就建立了,这时socket流就产生了,这是就可以进行数据的读写了
OutputStream out = s.getOutputStream();
out.write("tcp ge".getBytes());
s.close();
}
}
package com.yyq;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 存在对应关系
* 需求:定义端点接受数据并打印在控制台上
* 服务端:
* 1.建立服务器的socket服务,serversocket
* 并监听一个端口
* 2.获取链接过来的客户端对象,通过serversocket的accept方法
* 没有连接就会等,所以这个方法是堵塞式的
* 并打印在控制台
* 3.客户端如果发来数据,那么服务端要使用对应的客户端对象,并获取到
* 该对象的读取流来读取发过来的数据
* 4.关闭客户端(可选)
*/
public class TcpServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(12345);
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"....connected");
//该源是网络流 有了流对象之后读数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
s.close(); //关闭客户端。一定是服务器关闭客户端
//ss.close(); 关闭服务端
}
}