JAVA TCP/IP网络通讯编程(一)
一个实例通过client端和server端通讯
客户端发送:“我是客户端,请多关照”
服务端回复:“收到来自于"+s.getInetAddress().getHostName()+"的信息”
TestTcp1
附源码:
package com.ykw.net;
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;
//TCP_IP1
//客户端给服务端发送信息。服务端输出此信息在控制台上
//网络编程实际上就是Socket的编程
public class TestTCP1 {
//客户端
@Test
public void client(){
Socket socket = null ;
OutputStream os = null;
try {
//1.创建一个Socket的对象,通过构造器指明服务端的ip地址,以及接受程序的端口号
socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);
//2.getOutputStream():发送数据,方法返回OutputStream的对象
os = socket.getOutputStream();
//3.具体的输出过程
os.write("我是客户端,请多关照".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally{
//4.关闭相应的流和Socket对象
if(os!=null){
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//服务器端
@Test
public void server(){
ServerSocket ss=null;
Socket s=null;
InputStream is=null;
try {
//1.创建一个ServerSocket对象,通过构造器指明自身的端口号
ss = new ServerSocket(9090);
//2.调用其accept()方法,返回一个Socket对象
s = ss.accept();
//3.调用Socket对象的getInputStream()获取一个从客户端发送过来的输入流
is = s.getInputStream();
//4.对获取的输入流进行的操作
byte [] b = new byte[20];
int len;
while((len = is.read(b))!=-1){
String str = new String(b,0,len);
System.out.println(str);
}
System.out.println("收到来自于"+s.getInetAddress().getHostName()+"的信息");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//5.关闭相应的流以及Socket,ServerSocket的对象
if(is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(s!=null){
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ss!=null){
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
(J)day20_networkProgram
最新文章
- Atitit  godaddy 文件权限 root权限设置
- Vertica license导入最佳实践
- MongoDB【第一篇】MongodDB初识
- JAVA 多线程随笔 (三) 多线程用到的并发容器 (ConcurrentHashMap,CopyOnWriteArrayList, CopyOnWriteArraySet)
- PythonS12-day4学习笔记
- 关于最近的CSRF攻击
- [译]Mongoose指南 - 查询
- uva 818 (位运算 + 判环)
- 如何解决分布式系统数据事务一致性问题(HBase加Solr)
- HDU 5137 How Many Maos Does the Guanxi Worth
- C:进制
- mysql笔记整理
- 公交wifi运营平台分析
- Could not bind factory to JNDI
- EF Code First 学习笔记:表映射
- IE兼容性问题解决方案2--css样式兼容标签
- node.js 针对不同的请求路径(url) 做出不同的响应
- float的理解
- POJ 2318 TOYS(计算几何)
- coding 除了托管外,还能进行团队协作.
热门文章
- [python]print简单用法和读取用户输入
- LuoGu-P1122 最大子树和+树形dp入门
- codeforces 877 E. Danil and a Part-time Job(线段树(dfs序))
- 牛客网暑期ACM多校训练营(第二场) I Car 思维
- 面试必问的MySQL锁与事务隔离级别
- hadoop历史服务的启动与停止
- CXF添加拦截器和自定义拦截器
- 爬取凤凰网站财经类的新闻,函数时编程,可全部实现,由于内容量大,需要时间太长,服务器会禁止,为了防止,可以将time.sleep()设置的时间长点
- Python函数编程——闭包和装饰器
- day02小结