Tcp编程demo之三部曲
下面的demo的目的是通过代码来快速的了解tcp编程的步骤
1首先呢,对InetAddress类简单了解其作用
public static void main(String[] args) throws Exception {
InetAddress inet=InetAddress.getByName("www.baidu.com");
System.out.println(inet);//百度地址
System.out.println(inet.getHostName());//ip地址对应的域名
System.out.println(inet.getHostAddress());//获取IP地址
InetAddress inet1=InetAddress.getLocalHost();//本地地址
System.out.println(inet1);//获取本机的地址ip
}
下面的demo的目的是:客户端给服务端发送消息,然后服务端打印到控制台上
package com.henu.liulei;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import org.junit.Test;
public class TestTcp1 {
public static void main(String[] args) {
}
@Test
public void client() {
Socket socket=null;
OutputStream os=null;
try {
socket=new Socket(InetAddress.getByName("127.0.0.1"),9090);
os=socket.getOutputStream();
os.write("我是客户端".getBytes());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if(os!=null) {
os.close();
}
if(socket!=null) {
socket.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Test
public void server() {
try {
ServerSocket socket=new ServerSocket(9090);
Socket socket1=socket.accept();
InputStream is=socket1.getInputStream();
byte[]b=new byte[20];
int len;
while((len=is.read(b))!=-1) {
String str=new String(b,0,len);
System.out.println(str);
}
is.close();
socket1.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面的demo的目的是客户端给服务端发送消息,然后服务端打印到控制台上,同时给客户端反馈消息
package com.henu.liulei;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import org.junit.Test;
public class TestTcp2 {
@Test
public void client() {
Socket socket=null;
OutputStream os=null;
try {
socket=new Socket(InetAddress.getByName("127.0.0.1"),9090);
os=socket.getOutputStream();
os.write("我是客户端".getBytes());
socket.shutdownOutput();//执行此方法告诉服务端表示已经发送完了
InputStream is=socket.getInputStream();
byte[]b=new byte[20];
int len;
while((len=is.read(b))!=-1) {
String str=new String(b,0,len);
System.out.println(str);
}
is.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if(os!=null) {
os.close();
}
if(socket!=null) {
socket.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Test
public void server() {
try {
ServerSocket socket=new ServerSocket(9090);
Socket socket1=socket.accept();
InputStream is=socket1.getInputStream();
byte[]b=new byte[20];
int len;
while((len=is.read(b))!=-1) {
String str=new String(b,0,len);
System.out.println(str);
}
OutputStream os=socket1.getOutputStream();
os.write("收到".getBytes());
os.close();
is.close();
socket1.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最后一个demo的目的是从客户端发送给服务端,服务端接受并保存在本地,然后发消息给客户端表示接收到
package com.henu.liulei;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import org.junit.Test;
public class TestTcp3 {
@Test
public void client()
{
try {
//1:创建socket对象,
Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9090);
socket.setSoTimeout(10000);
//从本地获取一个文件,发送给服务端
OutputStream os=socket.getOutputStream();
FileInputStream fis=new FileInputStream(new File("C:/aaaaa.jpg"));
byte []b=new byte[1024];
int len;
while((len=fis.read(b))!=-1) {
os.write(b,0,len);
}
socket.shutdownOutput();
//接受来自服务端的信息
InputStream is= socket.getInputStream();
byte []b1=new byte[1024];
int len1;
while((len1 = is.read(b1))!=-1)
{
String str=new String(b1,0 , len1);
System.out.println(str);
}
//关闭相应的流
is.close();
fis.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void server()
{
try {
//1创建一个serversocket对象
ServerSocket ss=new ServerSocket(9090);
//2:调用accept方法,返回一个socket对象
while(true) {
Socket s=ss.accept();
//把接受到的信息保存在本地
InputStream is=s.getInputStream();
FileOutputStream fos=new FileOutputStream(new File("C:/bbbbb.jpg"));
byte []b=new byte[1024];
int len ;
while((len=is.read(b))!=-1) {
fos.write(b, 0, len);
}
//发送“接收成功”的消息反馈给客户端
OutputStream os=s.getOutputStream();
os.write("你发送成功,已经接受".getBytes());
//关闭流
os.close();
fos.close();
is.close();
s.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Tcp编程demo之三部曲的更多相关文章
- Java TCP编程
Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...
- [C# 网络编程系列]专题五:TCP编程
转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...
- python中的TCP编程学习
今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- 【Socket编程】通过Socket实现TCP编程
通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...
- JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- 网络编程之TCP编程
网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...
- 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来
在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...
- 五十四、linux 编程——TCP 编程模型
54.1 编程模型介绍 54.1.1 TCP 客户端服务器编程模型 客户端调用序列 调用 socket 函数创建套接字 调用 connect 连接服务器端 调用 I/O 函数(read/write) ...
随机推荐
- js实现随机选取[10,100)中的10个整数,存入一个数组,并排序。 另考虑(10,100]和[10,100]两种情况。
1.js实现随机选取[10,100)中的10个整数,存入一个数组,并排序. <!DOCTYPE html> <html lang="en"> <hea ...
- Android NDK环境搭建
本文主要记录NDK环境在Ubuntu下的搭建. 下载NDK 在官网进行下载NDK https://developer.android.com/ndk/downloads/index.html 当前最新 ...
- WINFROM中自定义控件之绑定数据即时更新
相信在WINFROM中写自定义控件或者用户控件,很多人都多多少少用过点 最近发现一个用户控件,绑定的数据源没办法自动更新,其实以前处理过这类的问题,可是这次遇到又花了1个多小时,所以决定记下来 在用户 ...
- SETEVENT的使用
来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686915(v=vs.85).aspx 昨天看到这个SetEvent的方法 ...
- HDU2825 Wireless Password —— AC自动机 + 状压DP
题目链接:https://vjudge.net/problem/HDU-2825 Wireless Password Time Limit: 2000/1000 MS (Java/Others) ...
- 2-mybatis框架
mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需 ...
- 创建Django博客的数据库模型
声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用 blog最主要的功能就是展示我们写的文章 ...
- 安装与设置hexo
普通用户(非全局)安装nodejs和npm wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh nvm ins ...
- 文件操作:os模块与os.path模块
一.os与os.path 原创:http://www.cnblogs.com/lovemo1314/archive/2010/11/08/1871781.html os模块用于处理文件及文件夹,包括文 ...
- dynamic 作为参数传入另一个程序集,获取值
dynamicOBJ.GetType().GetProperty("key").GetValue(dynamicOBJ, null)