TCP传输

来源:互联网 发布:彩虹六号围攻网络类型 编辑:程序博客网 时间:2024/05/01 22:29

------ android培训java培训,期待与您交流 ------
黑马程序员 TCP传输
TCP传输:
TCP的两个端点:一个是客户端,一个是服务端。
客户端:对应的对象,Socket,因为tcp是面向连接的,所以在建立socket服务时,就要有服务端存在,并连接成功。
服务端:对应的对象,ServerSocket
两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。
该流中既有读取,也有写入。
socket类构造函数   Socket(InetAddress address, int port)  创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port)  创建一个流套接字并将其连接到指定主机上的指定端口号。
方法摘要    InetAddress getInetAddress()  返回套接字连接的地址。 
InputStream getInputStream()   返回此套接字的输入流。 
OutputStream getOutputStream()  返回此套接字的输出流。
 void shutdownOutput() 禁用此套接字的输出流,就是关闭客户端输出流,相当于给流中加入结束标记。
TCP客户端的实现:
1,建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。
2,如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可。
3,关闭资源。
package tcp;
import java.io.OutputStream;
import java.net.Socket;
import org.junit.Test;
public class TcpClient {
@Test
public void testClient() throws Exception{
//与指定的主机端口建立连接
Socket s=new Socket("192.168.0.100",9999);
//获取客户端输出流对象
OutputStream out=s.getOutputStream();
out.write("server,nihao".getBytes());
out.close();
}
}
TCP服务端的实现:
1,创建服务端socket服务,并监听一个端口。
2,服务端为了给客户端提供服务,获取客户端的内容,先通过accept方法获取连接过来的客户端对象。
3,可以通过获取到的连接过来的socket对象中的输入流或者输出流和相应的客户端进行通讯。
4,如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。
ServerSocket类构造函数 ServerSocket(int port)  创建绑定到特定端口的服务器套接字。
方法摘要  Socket accept() 侦听并接受到此套接字的连接。 
需求:建立文本转换器,客户端发过来的数据服务端转换为大写反馈给客户端。
而且客户度可以不断的进行文本转换。当客户端输入over时,转换结束。
思路分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律来思考。
源:键盘录入。
目的:网络设备,网络输出流。
客户端:
package tcp;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import org.junit.Test;
public class TransClient {
@Test
public void testTransClient() throws Exception{
BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
String line= null;
Socket s= new Socket("192.168.0.100",18888);
while((line=bufr.readLine())!=null){
//获取键盘录入的数据
byte[] buf= line.getBytes();
//获取输出流写给服务端
OutputStream out =s.getOutputStream();
out.write(buf, 0, buf.length);
//获取输入流准备读取服务端的反馈信息
InputStream in =s.getInputStream();
byte[] bufc =new byte[1024];
in.read(bufc);
System.out.println(new String(bufc));
}
bufr.close();
s.close();
}
}
服务端:
package tcp;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import org.junit.Test;
public class TransServer {
@Test
public void testTransServer() throws Exception{
ServerSocket ss= new ServerSocket(18888);
while(true){
//获取连接过来的客户端对象
Socket s=ss.accept();
//获得客户端对象的输入流准备读取其发送过来的数据
InputStream in =s.getInputStream();
byte[] buf = new byte[1024];
in.read(buf);
String str=new String(buf,0,buf.length);
//获取客户端对象的输出流以向其反馈数据
OutputStream out =s.getOutputStream();
out.write(str.toUpperCase().getBytes());
}
}
}

------ android培训java培训,期待与您交流 ------

0 0
原创粉丝点击