---------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------
黑马程序员_java高级篇网络编程TCP实战Day8(上)
(小点补充:当我们把ip:192.168.1.255,就会实现广播)
TCP的开发模式与UDP有区别,UDP分为发送端与接收端,但TCP分为客户端与服务端
,这里列出简单的TCP原理实现,与客户端上传文本。
(一) 简单的TCP原理实现
步骤:
客户端
//1,创建客户端socket,并指定要连接的主机和端口
Socket socket=new Socket("192.168.1.100",10005);
//为了发送数据建立输出流
//2 OutputStream out=socket.getOutputStream();
//3 out.write("abc".getBytes());
//socket关闭后,流也关闭
//4 socket.close();
第一步相当于把买一根的管道,第二步,相当于把这个管道接通,来传输水,第三步开始传输水,第四部,传完以后,关闭闸门。
服务端
//1,建立服务端的Sersocket,并监听
ServerSocket s=new ServerSocket(10005);
//2,获取客户端socket对象
Socket socket=s.accept();
//获取客户端发过来的数据,用客户发过来的流对象读取
InputStream in=socket.getInputStream();
byte[] b=newbyte[1024];
int len=in.read(b);
System.out.println(new String(b,0,len));
System.out.println("您的IP:"+s.getInetAddress().getHostAddress());
s.close();
(二)简单的自行输入文本,注意流的关闭位置,其实原理不变,就是把我们原来写好的字符改成输入流,通过读取来实习。
客户端
package 网络编程;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Scoktcp {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1,建立服务,s相当于建好的大道
Socket s=new Socket("192.168.1.100",10007);
//我们走大道,调用流
//OutputStream os1=s.getOutputStream();
//定义读取键盘的流对象
BufferedReader br=new BufferedReader( new InputStreamReader(System.in));
//建立输出对象
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String str="";
BufferedReader bur=new BufferedReader(new InputStreamReader(s.getInputStream()));
while((str=br.readLine())!=null)
{
bw.write(str);
bw.newLine();
bw.flush();
String str2=bur.readLine();
// int len= is.read(b);
System.out.println("ser:"+str2);
}
//
bw.close();
s.close();
}
}
服务端
package 网络编程;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SerSockettcp {
/**
* @param args
* 需求:客户端给服务端发送数据,服务端收到后,给客户端返回
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1,建立服务端的socket,并监听
ServerSocket ss=new ServerSocket(10010);
Socket s=ss.accept();
//建立输出对象
String str="";
BufferedReader bur=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
while((str=bur.readLine())!=null)
{
//2,获取客户端socket对象
//获取客户端发过来的数据,用客户发过来的流对象读取
bw.write(str);
bw.newLine();
bw.flush();
}
bur.close();
bw.close();
ss.close();
// os.close();e
}
}
效果图:
(三) 文本上传,文本上传中,怎样去实现结束,通过在客户端加上一个s.shutdownOutput();//关闭客户端的输出流相当于给流加上一个结束标记。这个标记可以自行定义。如我发一个over过去,当服务端接收到了over就结束读取,因为我们每一次发过去的数据都是readLine()并不包含结束符。
客户端:
package 网络编程;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class CopyTextClient {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Socket s=new Socket("192.168.1.100",10009);
BufferedReader br=new BufferedReader(new FileReader("d:/1.txt"));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String str="";
while((str=br.readLine())!=null)
{
bw.write(str);
bw.newLine();
bw.flush();
}
//bw.write("over");
//bw.newLine();
//bw.flush();
s.shutdownOutput();//关闭客户端的输出流相当于给流加上一个结束标记
BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br1.readLine());
bw.close();
s.close();
}
}
服务端:
package 网络编程;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class CopyTextSer {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ServerSocket ss=new ServerSocket(10009);
Socket s=ss.accept();
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter( new FileOutputStream("d:/c_1.txt")));
String str="";
while((str=br.readLine())!=null)
{
bw.write(str);
bw.newLine();
bw.flush();
}
BufferedWriter bw1=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw1.write("上传成功!");
bw1.newLine();
bw1.flush();
bw.close();
br.close();
ss.close();
}
}
效果图:
---------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------