java.net 操练

一个很简单的局域网聊天工具的服务器端

/*

* Created on 2005-3-18
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package netChat;

import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

/**
* @author AppleTian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class server extends JFrame {
private JTextField messageBox;
private JTextArea infBox;
private ObjectInputStream input;
private ObjectOutputStream output;
private ServerSocket server;
private Socket serverSocket;

public server(){
super("server");
Container c=getContentPane();

messageBox=new JTextField("");
messageBox.setEnabled(false);

messageBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendData(e.getActionCommand());
}

});
c.add(messageBox,BorderLayout.NORTH);

infBox=new JTextArea();
infBox.setFont(new Font("Serif",Font.BOLD,12));
c.add(new JScrollPane(infBox),BorderLayout.CENTER);

setSize(500,400);
setVisible(true);

}

/**
* @param actionCommand
*/
protected void sendData(String actionCommand) {
try{
output.writeObject(actionCommand);
output.flush();
infBox.append("\nsend<<"+actionCommand+">> to client...\n");
}
catch(IOException e){
infBox.append("\nExceptionIOInSendDataFunction...");
}
}
public void runServer(){
try{
server=new ServerSocket(5000,100);
while(true){
waitForConnection();
getStreams();
processConnection();
closeConnection();
}
}
catch(EOFException e){
infBox.append("\nError in runServerFuction");
}
catch(IOException e){
e.printStackTrace();
}

}

/**
*
*/
private void closeConnection() throws IOException {
infBox.append("\nclose connection...");
messageBox.setEnabled(false);
output.close();
input.close();
serverSocket.close();

}

/**
*
*/
private void processConnection() throws IOException {
String mg="\nconnection succeful";
messageBox.setEnabled(true);
output.writeObject(mg);
output.flush();

do{
try{
mg=( String )input.readObject();
infBox.append("\nsend to client: "+mg);
infBox.setCaretPosition(infBox.getText().length());
}
catch(ClassNotFoundException e){
infBox.append("\n Unkown class received...");

}
}while(mg!="end");

}

/**
*
*/
private void getStreams() throws IOException {
output=new ObjectOutputStream(serverSocket.getOutputStream());
output.flush();

input=new ObjectInputStream(serverSocket.getInputStream());

infBox.append("\nGet Streams...");

}

/**
*
*/
private void waitForConnection() throws IOException {
infBox.append("wait for a Client...");
serverSocket=server.accept();
infBox.append("connected by"+serverSocket.getInetAddress().getHostName());

}

public static void main(String[] args) {
server my=new server();
my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
my.runServer();
}
}

客户端

/*
* Created on 2005-3-18
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package netChat;
import javax.swing.*;

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

/**
* @author AppleTian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class client extends JFrame {

private JTextField messageBox;
private JTextArea infBox;
private ObjectInputStream input;
private ObjectOutputStream output;
private String mg="";
private String chatServer;
private Socket client;
public client(String host){
super("client....");
chatServer=host;
Container c=getContentPane();

messageBox=new JTextField();
messageBox.setEnabled(false);
messageBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendData(e.getActionCommand());
}

});
c.add(messageBox,BorderLayout.NORTH);
infBox=new JTextArea();
c.add(infBox,BorderLayout.CENTER);

setSize(500,400);
setVisible(true);

}

/**
* @param actionCommand
*/
protected void sendData(String actionCommand) {
try{
mg=messageBox.getText();
output.writeObject(mg);
output.flush();
infBox.append("\nsend to server: "+mg);
}catch(IOException e){
infBox.append("\nIOException in sendData..");
}

}
public void runClient(){
try{

connectToServer();
getStreams();
processConnection();
closeConnection();
}catch(IOException e){
infBox.append(e.toString());
}

}

/**
*
*/
private void closeConnection()throws IOException {
// TODO Auto-generated method stub
infBox.append("\nclose...");
output.close();
input.close();
client.close();

}

/**
*
*/
private void processConnection() throws IOException{
// TODO Auto-generated method stub
messageBox.setEnabled(true );
do{
try{
mg=(String )input.readObject();
infBox.append("\nFrom server: "+mg);
infBox.setCaretPosition(infBox.getText().length());
}catch(ClassNotFoundException e){
infBox.append("classNotFound...\n");
}
}while(mg!="end");
}

/**
*
*/
private void getStreams() throws IOException {
// TODO Auto-generated method stub
output=new ObjectOutputStream(client.getOutputStream());
output.flush();
input=new ObjectInputStream(client.getInputStream());
infBox.append("get the IO Stream..\n");

}

/**
*
*/
private void connectToServer() throws IOException {
// TODO Auto-generated method stub
infBox.append("try connecting to server...\n");
client=new Socket(InetAddress.getByName(chatServer),5000);
infBox.append("connect to server:"+client.getInetAddress().getHostName()+"\n");

}

public static void main(String[] args) {
client p;
if(args.length==0)
p=new client("127.0.0.1");
else
p=new client(args[0]);
p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.runClient();

}
}

时间: 2024-10-21 15:41:44

java.net 操练的相关文章

java操练之求两数最大公约数的两种算法思路

代码: 1 public class Hello { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 int a = 1112; 8 int b = 208; 9 int e = 546800; 10 int f = 256400; 11 int c = 1; 12 int min = (a < b ? a : b); 13 int min2 = (e < f ? e : f); 14 for(

《驯服烂代码:在编程操练中悟道》一第2章 按图索骥地编写代码

第2章 按图索骥地编写代码 现在,设计文档都齐备了,github也配好了,安装了JDK7和Maven,空项目已经用Maven建好了.还安装好了一个免费使用的IntelliJ IDEA 13.1 Community版,用来编程.现在就可以按照细化后的类图来编写第一个类TimeSubject了. 下面就是TimeSubject类的代码: public abstract class TimeSubject { protected Map<String, Clock> clocks = new Has

讲解使用Docker搭建Java Web运行环境_docker

Docker 是一种"轻量级"容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐步使用 Docker 来替换现有的虚拟化平台了.作为一名 Java 程序员,我们是时候一起把 Docker 学起来了! 本文会对虚拟化技术与 Docker 容器技术做一个对比,然后引出一些 Docker 的名词术语,比如:容器.镜像等,随后将使用 Docker 搭建一个 Java Web 运行环境,最后将对本文做一个总结. 我们先来回顾一下传统虚拟化技术的体系架构: 可见,我们

我该如何学习java呢

问题描述 大家好,我现在大三,马上就大四了.可是,意味着马上要找工作了,说实话,大学三年来,没有学到什么东西.根据我的了解,现在java好像很热啊.做java程序员的人很多.我也想好好学下java,以后方便找工作.但是,我不知道从哪里学起.我现在只会一点java的基础,用过eclipse,其他的都没有接触过.请问,谁可以指点下呢. 解决方案 解决方案二:楼主你好,你和我的情况差不多,我大二下学期的时候开始学java,我属于喜欢自学型的,所以一直没有报过什么辅导班,所以也不知道那些好不好,就把我自

《驯服烂代码:在编程操练中悟道》一第1章 刻舟求剑的文档

第1章 刻舟求剑的文档 "什么是软件?"20世纪90年代初的一个冬日,在北京东南部的一所大学里,一位年近花甲的老师,给我们这些计算机系的学生讲软件工程这门课时,问了这个问题.对于当时几乎没有机会接触计算机的我来说,软件就是学校计算机房里那些DEC小型机上令人费解的命令,和286个人计算机里那些好玩的"吃豆子"和"赛车"游戏."软件不仅仅是程序,还包括描述程序的文档.软件就是程序加文档."老师对软件的定义,深深地刻在我的脑子里,

诊断 Java 代码:设计轻松的代码维护

设计 本月,Eric Allen 解释了在使代码更易于维护的同时,避免和控制无理由的变化怎么会是保持代码健壮性的关键.他集中讨论了诸如函数样式代码编写之类的概念,以及标记字段.方法和类的方法来处理并防止可变性.Eric 还解释了本任务中单元测试和重构的角色,并提供了协助实现重构的两个工具.在相关论坛中与作者和其他读者分享您对本文的看法.(您也可以单击本文顶部或底部的"讨论",访问该论坛.)有效调试源自良好的编程.设计易于维护的程序是程序员面临的最困难挑战之一,其部分原因在于程序通常并不

win7上java环境变量设置方法

  Java程序依赖JDK,就像C#程序依赖.NetFrameWork一样. 所以在开发之前,必须在win7或者是linux上,安装jdk(JavaDevelopkit)里面包括java一些工具,还有JRE(JavaRuntimeEnvironment)Java运行环境. 系统:windows7 jdk版本:jdk1.7 安装路径:c:/java 安装JDK时,上图显示的公共JRE和后续单独安装的JRE是一样的.所以只装一个就可以了. 按如上步骤操作,显示出环境变量的配置界面. 新建,添加 变量

Java新手入门教程:新手必须掌握的30条Java基本概念

  Java新手必看教程是什么?当然是绿茶小编带来的Java入门需掌握的30个基本概念啦,掌握了这些概念对于学习Java大大有利,正在学习Java编程的同学们快来看看吧. 1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大 限度上

Java有哪些常用语?Java常用语言汇总

  Java有哪些常用语?不介绍Java 常用语,对Java 的总体介绍就是不完整的.尽管促使Java 诞生的源动力是可移植性和安全性,但在Java 语言最终成型的过程中,其他一些因素也起了重要的作用.接下来,绿茶小编就一一来介绍一下. · 简单(Simple) · 安全(Secure) · 可移植(Portable) · 面向对象(Object-oriented) · 健壮(Robust) · 多线程(Multithreaded) · 体系结构中立(Architecture-neutral)