大约3天前 -
一个控制台的程序,从客户端传字符串到服务器端,然后服务器端返回转换成大写的字符串。
跟上次的那个程序不同之处在于使用的是UDP传输协议。
为了方便使用,建立一个工具类
import java.net.*;
public class UDP {
public static DatagramPacket toDatagram(String s,InetAddress destIA,int destPort){
byte[] buf = s.getBytes();
return new DatagramPacket(buf,buf.length,destIA,destPort);
}
public static String toString(DatagramPacket p){
return new String(p.getData(),0,p.getLength());
}
}
客户端代码
import java.io.*;
import java.net.*;
public class 客户端 {
private InetAddress hostAddress;
static final int INPORT = 8888;
private byte[] buf = new byte[1000];
private DatagramPacket dp = new DatagramPacket(buf,buf.length);
private DatagramSocket socket;
客户端(){
try{
socket = new DatagramSocket();
hostAddress = InetAddress.getByName("localhost");
while(true){
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader
大约2周前 -
一个基于Socket的GUI程序。
使得客户端和服务端聊天……
额,才开始弄,慢慢学,老是出问题。
我的心得如下:
1、socket的流打开后就不能关闭了,要不然就完了。
2、因为做GUI的时候,把一个监听复制了两次~~所以……
客户端
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class 客户端 implements ActionListener{
JFrame jframe;
JPanel p1,p2,p3;
JButton con,send;
JTextField name;
JScrollPane sp;
JTextArea msg,text;
JLabel user;
static Thread t;
Socket s = null;
DataInputStream d_in = null;
DataOutputStream d_out = null;
public 客户端(){
jframe = new JFrame("聊天系统-客户端");
jframe.setLayout(new BorderLayout());
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p1 = new JPanel();
user = new JLabel("用户名:");
name = new JTextField(12);
con = new JButton("连接");
con.addActionListener(this);
p1.add(user);
p1.add(name);
p1.add(con);
p2 = new JPanel();
msg = new JTextArea(20,51);
msg.setEditable(false);
sp = new JScrollPane(msg);
p2.add(sp);
p3 =
大约3周前 -
一直觉得网络编程很重要,但是一直没静下心来学习,现在好了,都教到这里来了。
实验1是客服端把三角形三边长发送给服务器端,然后服务器端计算出面积后又发回来。
很简单的程序,基于TCP/IP的socket。
客户端
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
import java.net.*;
public class 客户端 implements ActionListener {
JTextField 值A;
JTextField 值B;
JTextField 值C;
JTextField 结果;
JButton 计算;
JFrame frame;
public 客户端(){
frame = new JFrame("三角形面积计算");
frame.setLayout(new GridLayout(3,4));
计算 = new JButton("计算");
JLabel 边A = new JLabel("边A:");
JLabel 边B = new JLabel("边B:");
JLabel 边C = new JLabel("边C:");
值A = new JTextField();
值B = new JTextField();
值C = new JTextField();
JLabel 提示 = new JLabel("结果:");
结果 = new JTextField();
frame.getContentPane().add(边A);
frame.getContentPane().add(边B);
frame.getContentPane().add(边C);
frame.getContentPane().add(值A);
frame.getContentPane().add(值B);
frame.getContentPane().add(值C);
frame.getContentPane().add(提示);
frame.getContentPane().add(结果);
frame.getContentPane().add(计算);
计算.addActionListener(this);
frame.setSize(400, 200);
frame.setVisible(true);
frame.setLocationRelativeTo(
大约3周前 -
按TIOBE自己的说明,TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标。每月更新。这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用xx的搜索引擎(诸如Google、 MSN 、雅虎)以及Wikipedia和YouTube进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
详细排名
多年波动
原始链接:http://www.tiobe.com/content/paperinfo/tpci/index.html
本站原创文章,转载时请注明:转载于耍下博客的编程语言排名2010.3
大约1月前 -
1 简介
2 {dy}个例子
3 与Java交互
4 万物皆对象
5 类
6 条件类和模式匹配
7 Trait
8 泛型
9 结语
好久好久都没有更新博客了,今天就憋一篇出来吧。
1 简介
本文仅在对Scala语言和其编译器进行简要介绍。本文的目的读者是那些已经具有一定编程经验,而想尝试一下Scala语言的人们。要阅读本文,你应当具有基础的面向对象编程的概念,尤其是Java语言的。
2 {dy}个例子
作为学习Scala的{dy}步,我们将首先写一个标准的HelloWorld,这个虽然不是很有趣,但是它可以让你对Scala有一个最直观的认识而不需要太多关于这个语言的知识。我们的Hello world看起来像这样:
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
程序的结构对Java程序员来说可能很令人怀念:它由一个main函数来接受命令行参数,也就是一个String数组。这个函数的{wy}一行代码把我们的问候语传递给了一个叫println的预定义函数。main函数不返回值(所以它是一个procedure method)。所以,也不需要声明返回类型。
对于Java程序员比较陌生的是包含了main函数的object语句。这样的语句定义了一个单例对象:一个有且仅有一个实例的类。object语句在定义了一个叫HelloWorld的类的同时还定义了一个叫HelloWorld的实例。这个实例在{dy}次使用的时候会进行实例化。
聪明的读者可能会发现main函数并没有使用static修饰符,这是由于静态成员(方法或者变量)在Scala中并不存在。Scala从不定义静态成员,而通过定义单例object取而代之。
2.1 编译实例
我们使用Scala编译器“scalac”来编译Scala代码。和大多数编译器一样,scalac 接受源文件名和一些选项作为参数,生成一个或者多个目标文件。scala编译生成的产物就是标准的Java类文件。
假设我们吧上述代码保存为文件HelloWorld.scala,我们使用下面的命令编译它(大于号“>”表示命令提示符,你不必输入它)
> scalac HelloWorld.scala
这将会在当前目录生成一系列.class文件。其中的一个名为HelloWorld.class 的文件中定义了一个可以直接使用scala命令执行的类。下文中你可以看到这个例子。
2.2 运行实例
一旦完成编译,Scala程序就可以使用scala命令执行了。scala的用法和java很相似,并且连选项也大致相同。上面的例子就可以使用下面的命令运行,这将会产生我们所期望的输出。
> scala -classpath . HelloWorld
Hello, world!
3 与Java交互
Scala的一个强项在于可以很简单的于已有的Java代码交互,所有java.lang中的类都已经被自动导入了,而其他的类需要显式声明导入。
来看看演示代码吧。我们希望对日期进行格式化处理,比如说用法国的格式。
Java类库定义了一系列很有用的类,比如Date和DateFormat。由于Scala于Java能够进行很好的交互,我们不需要在Scala类库中实现等效的代码,而只需直接吧Java的相关类导入就可以了:
import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._
object FrenchDate {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)
}
}
Scala的import语句看上去与Java的非常相似,但是它更加强大。你可以使用大括号来导入同一个包里的多个类,就像上面代码中{dy}行所做的那样。另一个不同点是当导入一个包中所有的类或者符号时,你应该使用下划线(_)而不是星号(*)。这是由于星号在Scala中是一个有效的标识符(例如作为方法名称)。这个例子我们稍后会遇到。
第三行的import语句导入了DataFormat类中的所有成员,这使得静态方法getDateInstance和静态变量LONG可以被直接引用。
在main函数中,我们首先建立了一个Java的Date实例。这个实例默认会包含当前时间。接下来我们一个使用刚才导入的静态函数getDateInstance定义了日期格式。{zh1}我们将使用DataFotmat格式化好的日期打印了出来。{zh1}一行代码显示了Scala的一个有趣的语法:只有一个参数的函数可以使用下面这样的表达式来表示:
df format now
其实就是下面的这个冗长的表达式的简洁写法
df.format(now)
这看起来是一个语法细节,但是它导致一个重要的后果,我们将在下一节进行说明。
另外,我们还应当注意到Scala中可以直接继承或者实现Java中的接口和类。
4
大约3月前 -
本文是原创文章,转载时请署名出处。http://www.shuax.com
windows7带来了一系列的新特性,尤其是任务栏的改进。诸如jumplist、缩略图控制……
本篇文章教你如何使用进度条控制这个功能。
一直在网上寻找如何开发windows7的新特性,可是千篇一律的全是.Net的托管代码,不好意思,反正我是看不懂的。然后突然想到Mplayer ww编译版现在也支持windows7的特性啦,于是跑去看源代码。果然让我发现了一个win7shellapi.h。下载下来,打开一看,嘿嘿,就有我想要的ITaskbarList3。哦,对了win7的这些功能是通过COM接口实现的。
下载地址:https://mplayer-ww.svn.sourceforge.net/svnroot/mplayer-ww/trunk/mplayer/win7shellapi.h
好了,既然找到了头文件就好办了。我为了方便,我使用的是MFC来演示。
//引入头文件
#include "win7shellapi.h"
void CMyDlg::OnButton1()
{
ITaskbarList3 * pTaskbarList = NULL;
CoInitialize(0);
CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList, (void **)&pTaskbarList);
pTaskbarList->SetProgressState(this->GetSafeHwnd(),TBPF_PAUSED);
pTaskbarList->SetProgressValue(this->GetSafeHwnd(),7,10);
}
当你点击Button1按钮的时候,你就神奇的发现任务栏有进度条了,快去享受吧。
本站原创文章,转载时请注明:转载于耍下博客的windows7编程-任务栏进度条
大约3月前 -
像我们这种天天和代码打交道的人,一款耐看的字体还是很重要的。
以前一直用vc6默认的Fixedsys,10pt的经典点阵字体,可是看久了,也觉得有点累,而且中文不好看。
更重要的是不能放大,行距也比较大。
昨天看见一款YaHei.Consolas字体,就是英文部分是Consolas,中文部分是微软雅黑。
个人觉得还不错。但是使用的时候发现那个制表符那里的特殊符号显示有点问题,微软雅黑不是等宽的,我自己动手改了一下。
好看多了。另外这个版本的字体还能被某些只能使用等宽字体的软件识别,比如Dev-CPP。
效果图如下:
下载地址:http://www.uushare.com/user/shuax/file/2450047
我的网站速度比较慢,请见谅。
本站原创文章,转载时请注明:转载于耍下博客的编程字体YaHei Consolas