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) ...
随机推荐
- php总结1 ——php简介、工作原理、运行环境、文件构成、语法结构、注释
1.1 PHP 超文本预处理程序.实际就是制作网站的脚本程序 1.2 运行环境: wamp——windowns+apache+mySQL+php 常用于开发.学习和研究 lamp ——linu ...
- Java for LeetCode 115 Distinct Subsequences【HARD】
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- JAVA源码分析------锁(1)
http://870604904.iteye.com/blog/2258604 第一次写博客,也就是记录一些自己对于JAVA的一些理解,不足之处,请大家指出,一起探讨. 这篇博文我打算说一下JAVA中 ...
- git设置只允许特定类型的文件
git设置只允许特定类型的文件 # 忽略所有文件 * # 不忽略目录 !*/ # 不忽略文件.gitignore和*.foo !.gitignore !*.foo
- codeforces 569C C. Primes or Palindromes?(素数筛+dp)
题目链接: C. Primes or Palindromes? time limit per test 3 seconds memory limit per test 256 megabytes in ...
- linux 进程学习笔记-进程调度
在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调 ...
- CF Round #460
晚上去看月亮了 离比赛结束半个小时才滚回来A了T1T2T3... 又要掉Rating辣 T4 给一个有向图 每条边有一个英文字母作为边权 求一条路径 该路径上权值众数出现次数最多 求最多的出现次数 拓 ...
- CodeForces - 123E Maze
http://codeforces.com/problemset/problem/123/E 题目翻译:(翻译来自: http://www.cogs.pw/cogs/problem/problem.p ...
- C++ STL std::wstring_convert处理UTF8
#include <iostream> #include <string> #include <locale> #include <codecvt> # ...
- [转载]Windows网络编程系列教程之四:Select模型
原文:http://www.51see.com/asp/bbs/public/bp_show.asp?t_id=200308131152297103 讲一下套接字模式和套接字I/O模型的区别.先说明一 ...