您的位置:首页 > 理论基础 > 计算机网络

网络编程TCP的一些基本应用操作

2015-04-15 20:44 417 查看
TCP的特点

1、必须建立连接,形成传输数据的通道

2、在连接中进行大数据量传输

3、通过三次握手完成连接,是可靠协议(打电话:A:听得到吗? B:我听得到,你听得到吗?A:我也听得到。 )

4、因为建立连接,效率稍

TCP的应用

数据下载

TCP示例

示例一

TCP客户端

<span style="font-size:18px;">package 网络编程;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

<span style="color:#33cc00;">/**
*客户端,
*通过查阅Socket对象,发现在该对象建立时就可以去连接指定主机
*因为tcp是面向连接的所以在建立socket服务连接时,就需要有服务端存在,形成通道后,
*在该通道传递数据
*
*步骤:
*1、创建socket服务,并指定要连接的主机和端口
*
*/</span>
public class TCP_SocketDemo01 {

public static void main(String[] args) throws Exception {
<span style="color:#33cc00;">//创建socket服务,指定主机和端口</span>
Socket socket=new Socket("10.144.240.59",10003);
<span style="color:#33cc00;">//注:如果此句话执行成功,就在网络中形成了socket流,既有输入流,又有输出流

//为了能发送数据,应该获取socket流中的输出流</span>
OutputStream  out=socket.getOutputStream();

out.write("你好服务端".getBytes());<span style="color:#33cc00;">//将数据写出到网络流中</span>
}

}</span>
TCP服务端

<span style="font-size:18px;">package 网络编程;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

<span style="color:#33cc00;">/**
* 服务端:
* 需求:定义端点数据接受并打印在控制台上
* 1、建立服务端的socket服务,ServerSocket
*      并建立一个端口
* 2、获取连接过来的客户端对象
* 		通过ServerSocket的accept方法所以这个方法是阻塞式的
* 3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,
* 		并获取到客户端对象的读取流来读取这个数据 ,并打印
* 4、关闭(可选)
*
*/</span>
public class TCP_ServerSocketDemo01 {

public static void main(String[] args) throws Exception {
<span style="color:#33cc00;">//建立服务端socket服务,并监听一个端口</span>
ServerSocket ss=new ServerSocket(10003);
<span style="color:#33cc00;">//通过ServerSocket的accept()方法获取链接过来的客户端对象</span>
Socket  s=ss.accept();

String ip=s.getInetAddress().getHostAddress();

System.out.println(ip+"------------------");
<span style="color:#33cc00;">//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据</span>
InputStream  in	=s.getInputStream();

byte[] buf=new byte[1024];
int len=in.read(buf);

System.out.println(new String(buf,0,len));

s.close();<span style="color:#33cc00;">//关闭客户端</span>
ss.close();
}

}</span>
示例二

TCP客户端

<span style="font-size:18px;">package 网络编程;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

<span style="color:#33cc00;">/**
* 演示tcp传输的客户端和服务断的互访
* 需求:客户端给服务端发送消息,服务端收到后,给客户端反馈消息
* */
/*
* 客户端
* 1、建立socket服务,指定要连接的主机和端口
* 2、获取socket流中的输出流,将数据写到该流中去,通过网络发送给服务器
* 3、获取socket流中的输入流,讲服务端反馈的数据获取到并打印,
* 4、关闭客服端
* */</span>

public class TCP_SocketDemo02 {

public static void main(String[] args) throws Exception {
Socket  s=new Socket("10.144.240.59",10004);
OutputStream out=s.getOutputStream();
out.write("服务端你好啊!".getBytes());

InputStream  in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);<span style="color:#33cc00;">//这是一个阻塞式的方法,如果服务端一直没有写入数据,那么就一直等待,
//只有服务端将数据写入socket流中,才开始执行</span>

System.out.println(new String(buf,0,len));
s.close();
}

}</span>


TCP服务端

<span style="font-size:18px;">package 网络编程;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.net.ssl.SSLContext;

<span style="color:#33cc00;">/**
* 演示tcp传输的客户端和服务断的互访
* 需求:客户端给服务端发送消息,服务端收到后,给客户端反馈消息
* */
/*
* 服务端
* */</span>

public class TCP_ServerSocketDemo02 {

public static void main(String[] args) throws Exception {
ServerSocket scoSocket=new ServerSocket(10004);
Socket s=scoSocket.accept();

String ip=s.getInetAddress().getHostAddress();<span style="color:#33cc00;">//获取ip</span>
System.out.println(ip+"----");
<span style="color:#33cc00;">//现将socket流中输入流中的数据读取</span>
InputStream  in	=    s.getInputStream();

byte [] b=new byte[1024];
int a=in.read(b);
System.out.println(new String(b,0,a));
<span style="color:#33cc00;">//用socket流中的输出流将已经读取到的消息反馈回去</span>
OutputStream out= 	s.getOutputStream();
out.write("客户端我已收到消息".getBytes());

s.close();<span style="color:#33cc00;">//关闭客户端</span>
scoSocket.close();<span style="color:#33cc00;">//关闭服务端,可选操作</span>
}

}</span>


示例三

TCP客户端

<span style="font-size:18px;">package 网络编程;
<span style="color:#33cc00;">/**
* 需求,建立一个文本转换器
* 客户端将文本发送给服务端,服务端将文本转换为大写返回给客户端
* 二区客户端可以不断的进行文本转换,当客户端输入over时,转换结束。
* 分析:
* 客户端
* 	既然是操作设备上的数据那么就可以使用io技术,并按照io的操作来思考
* 客户端的源:键盘输入
* 客户端的目的:网络输出流
* 操作的是文本数据,可以用字符流
*
* 步骤
* 1、建立服务
* 2、键盘输入
* 3、将数据发送给服务端
* 4、获取服务端返回的大写数据
* 5、结束关闭资源
</span>*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCP_SocketDemo03 {

public static void main(String[] args) throws Exception {
<span style="color:#33cc00;">// 建立服务,指定端口</span>
Socket s = new Socket("10.144.240.59", 10005);

<span style="color:#33cc00;">//目的:网络输出流,将数据写给服务端</span>
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));

<span style="color:#33cc00;">//源: 获取键盘输入数据</span>
BufferedReader bReader = new BufferedReader(new InputStreamReader(
System.in));
<span style="color:#33cc00;">		//定义一个socket读取流,读取服务端返回的大写信息
</span>		BufferedReader bIn=new BufferedReader(new InputStreamReader(
s.getInputStream()));

String data=null;
while ((data=bReader.readLine()) !=null) {
if ("over".equals(data)) {
break;
}
<span style="color:#33cc00;">			//将数据写给服务端
</span>			bWriter.write(data);
bWriter.newLine();<span style="color:#33cc00;">//添加一个换行符,充当结束标记
</span>			bWriter.flush();<span style="color:#33cc00;">//数据在缓冲区中,需要刷新</span>

<span style="color:#33cc00;">	//从服务端获取转换后的大写数据</span>
String str=bIn.readLine();
System.out.println("大写"+str);

}
bReader.close();<span style="color:#33cc00;">//关闭键盘录入</span>
s.close();<span style="color:#33cc00;">//关闭服务端</span>
}
}</span>
TCP服务端

<span style="font-size:18px;">package 网络编程;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

<span style="color:#33cc00;">/**
* 需求,建立一个文本转换器
* 客户端将文本发送给服务端,服务端将文本转换为大写返回给客户端
* 二区客户端可以不断的进行文本转换,当客户端输入over时,转换结束。
*
* 服务端
* 源:socket中的读取流
* 目的:socket中的输出流
*</span>/
public class TCP_ServerSocketDemo03 {

public static void main(String[] args) throws Exception {
ServerSocket ssocket=new ServerSocket(10005);
<span style="color:#33cc00;">//获取连接的客户端</span>
Socket s=ssocket.accept();
<span style="color:#33cc00;">//获取ip</span>
String ip=s.getInetAddress().getHostAddress();
System.out.println("连接的ip为"+ip);
<span style="color:#009900;">//源:获取socket流中的读取流</span>
BufferedReader bReader=new BufferedReader(new InputStreamReader(
s.getInputStream()));
<span style="color:#33cc00;">//目的,获取socket流中的输出流,并将大写数据写入到socket流中,并发送给客户端</span>
BufferedWriter bWriter=new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));

String str=null;
while ((str=bReader.readLine()) !=null) {
System.out.println(str);
str= str.toUpperCase();
bWriter.write(str);
bWriter.newLine();<span style="color:#33cc00;">//添加一个换行符,充当结束标记</span>
bWriter.flush();<span style="color:#33cc00;">//数据在缓冲区中,需要刷新</span>
}
s.close();
ssocket.close();
}</span>

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: