java网络通信
2016-04-02 21:49
381 查看
public class MyClient { //客户端代码 public static void main(String []args){ try { Socket s=new Socket("127.0.0.1",8989); System.out.println("客户端连接上服务端"); File f=new File("E://00.jpg"); FileInputStream fis=new FileInputStream(f); // OutputStream out=s.getOutputStream(); byte []bytes=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1){ out.write(bytes,0,len); } s.shutdownOutput(); //得到来自服务器端的反馈信息 BufferedReader bfr=new BufferedReader(new InputStreamReader(s.getInputStream())); String line=null; line=bfr.readLine(); System.out.println(line); fis.close(); s.close(); } catch (Exception e) { e.printStackTrace(); } } }
“`
public class MyServer {
//服务器端代码
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8989);
Socket s=ss.accept();
File file=new File(“D://pic”);
if(!file.exists()){
file.mkdirs();
}
File f=new File(file,”00.bmp”);
FileOutputStream fos=new FileOutputStream(f);
InputStream in=s.getInputStream();
int len=0;
byte []bytes=new byte[1024];
while((len=in.read(bytes))!=-1){
fos.write(bytes,0,len);
}
OutputStream out=s.getOutputStream();
String line=”上传成功”+”\r\n”;
out.write(line.getBytes());
fos.close();
ss.close();
} catch (Exception e) { e.printStackTrace(); } }
}“`
今天写的这段代码主要练习完成图片的上传,加深输入输出流的使用方法,这两段代码有两点要注意的地方,
1.客户端代码中的s.shutdownout,这句代码主要是通知服务器端图片已经传输完毕,禁用此套接字的输出流,否则服务器端中的in.read(bytes)将一直在等待读取不会结束,,程序会发生阻塞。
2.服务器端代码中的String line=”上传成功”+”\r\n”,这段代码中的”\r\n”很重要,只有加了这段代码,客户端的readline才知道已经读取完毕,否则readline将会阻塞,因为readline()是靠换行符识别一行字符的。
相关文章推荐
- OkHttp+Stetho+Chrome调试android网络部分
- HTTP缓存原理
- HTTP状态码大全
- 【费用流】【网络流24题】【cogs 739】运输问题
- Android网络与数据存储_学习笔记_第五周
- android ListView下拉刷新拉取网络数据
- httpClient post请求设置
- 网络通信框架Volley使用详细说明
- 软考网络工程师
- u-boot网络启动分析(二) 驱动注册
- LSTM神经网络Demystifying LSTM neural networks
- 深度信念网络Deep Belief Networks
- 神经网络,流形和拓扑Neural Networks, Manifolds, and Topology
- Android 网络通信框架Volley的二次封装
- 对TCP/IP网络协议的深入浅出归纳
- HTTP协议
- HttpClient设置请求头
- HTTP总结
- 《图解HTTP》
- 建立神经网络:Part 0