java学习总结——第十八天

原创 2014年05月13日 17:33:36

网络编程 Socket

Socket可以看成是两个程序进行通讯连接中的一个端口

主要还是代练习

客户机与服务机直接的通讯(Tcp)

服务机


/**
 * 服务器端程序
 * @author Administrator
 *
 */
public class Server {

//1、定义资源
ServerSocket serverSocket; //服务器端ServerSocket
private int port=8989;

//2、初始化,启动服务器
public Server(){
try {
serverSocket=new ServerSocket(port); //实例化ServerSocket

System.out.println("服务器启动成功!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("服务器启动失败!");
}
}
//3、处理业务
public void service(){
while(true){
Socket socket=null;
try {
socket=serverSocket.accept();//接收客户的链接请求,返回Socket对象,阻塞

//分配给工作线程
new HandlerThread(socket).start();



//接收器(输入流)
// BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));

// //1、字节流
// InputStream is=socket.getInputStream();
//
// //2、字节流——>字符流
// InputStreamReader isr=new InputStreamReader(is);
//
// //3、字符流——>缓冲流
// BufferedReader br=new BufferedReader(isr);


//发送器(输出流)
// PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);


// //1、字节流
// OutputStream os=socket.getOutputStream();
//
// //2、字节流——>字符流
// OutputStreamWriter osw=new OutputStreamWriter(os);
//
// //3、字符流——>PrintWriter
// PrintWriter pw=new PrintWriter(osw,true);




// String msg=null;
//读取客户的发生的信息
// while((msg=br.readLine())!=null){
// if(msg.equals("quit")||msg.equals("MagicExit")){
// break;
// }
// System.out.println(clientAdd+":"+clientPort+"> "+msg);

//写出发送信息
//回声
// pw.println("you said: "+msg);  //返回输出给客户端

//聊天发送信息
// Scanner in=new Scanner(System.in);
// msg=in.nextLine();
// pw.println(msg);  //返回输出给客户端
//
// }


// if(msg.equals("MagicExit")){
// break;
// }

} catch (IOException e) {
e.printStackTrace();
}
}

}

public static void main(String[] args) {
new Server().service();
}
}

客户机

public class Client {

//1、资源
Socket socket;
String host="127.0.0.1"; //127.0.0.1 localhost
int port=8889;

//2、连接到服务器
public Client() {
try {
socket=new Socket(host,port);

System.out.println("连接服务器成功!");
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("主机无法找到!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("连接服务器错误!");
}
}

//3、处理业务
public void send(){

try {

//发送器
PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
//接收器
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));


while(true){
Scanner in=new Scanner(System.in);
String msg=in.nextLine();

pw.println(msg);  //发送信息

if(msg.equals("quit")||msg.equals("MagicExit")){
break;
}

msg=br.readLine(); //接收服务器端返回的信息
System.out.println(msg);
}

} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}


}



public static void main(String[] args) {
new Client().send();
}


}

多线程处理 可以实现多个客户机连接一个服务机

public class HandlerThread extends Thread {

Socket socket;
BufferedReader br;
PrintWriter pw;

public HandlerThread(Socket socket) {
this.socket=socket;
}
/**
* 初始化
* @throws IOException
*/
public void init() throws IOException{
//接收器(输入流)
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送器(输出流)
pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);

}


@Override
public void run() {


try {
init();

//获得客户端连接信息(地址,端口)
String clientAdd=socket.getInetAddress().getHostAddress();
int clientPort=socket.getPort();
System.out.println("来自"+clientAdd+":"+clientPort+"的连接请求。");

String msg=null;
//读取客户的发生的信息
while((msg=br.readLine())!=null){
if(msg.equals("quit")||msg.equals("MagicExit")){
break;
}
System.out.println(clientAdd+":"+clientPort+"> "+msg);

//写出发送信息
//回声
pw.println("you said: "+msg);  //返回输出给客户端

//聊天发送信息
// Scanner in=new Scanner(System.in);
// msg=in.nextLine();
// pw.println(msg);  //返回输出给客户端
//
}

} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}



}

}

相关文章推荐

Java进阶学习第十八天——事物与连接池

事务的概念 MySQL下操作事物 JDBC下操作事物 事务特性(重点) ACID 事务的隔离级别 隔离级别方案演示 bcUtils中使用ThreadLocal 丢失更新 解决丢失更新可以采用两种方式 ...

No_16_0316 Java基础学习第十八天

集合练习集合对象的 HashSet TreeSet Collection总结

黑马程序员--Java基础学习(其他对象和IO流)第十八天

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础学习(其他对象和IO流)第十八天 一,其他对象 System:类中的方法和属性...

Java学习第十八天

一、异常的概述和分类异常的概述 异常就是Java程序在运行过程中出现的错误。 异常的分类 通过API查看Throwable Error 服务器宕机,数据库崩溃等...

Irrlicht引擎源码剖析——第十八天

今天开始看GUI(图像用户界面)模块的实现部分了。首先是BuildInFont.h,内置字体,在这个头文件里作者使用了Bin2H。Bin2H是免费软件,可以从www.code3d.com 免费下载,一...
  • iduosi
  • iduosi
  • 2012年08月13日 13:33
  • 1553

java第十八天

18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collectio...

第十八天-Java_IO

其他对象 System类 类中的方法和属性都是静态的。 out:标准输出,默认是控制台。 in:标准输入,默认是键盘。 获取系统属性信息:Properties getProperties()...

黑马程序员-第十八天(java中其它的对象)

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------                   一、 S...

Unity3D笔记第十八天——编辑器的拓展

Unity引擎结构 Unity引擎除了提供大部分通用功能以外,还为开发者提供了编辑器的扩展开发接口,开发者可以编写编辑器脚本,打造最适合自己游戏的辅 助工具和定制的编辑器,通过使用编辑器类...

IOS第十八天——警告窗口

不知道是不是晚上着凉了,今天感冒了,很严重,额,不是H7N9。。。我说的严重是鼻涕如黄河入海川流不息(兄弟你脑子烧糊涂了吧),刚看完医生,给开了点儿药,不知道一会儿会不会药效发作我就直接晕过去了。废话...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java学习总结——第十八天
举报原因:
原因补充:

(最多只允许输入30个字)