网络编程也就是使得程序可以在网络上进行交互操作,使其具有网络功能,现在大部分程序开始转变为网络化,实时化。我们常用的QQ,等通讯工具,现在文字工具也开始网络化,如金山的wps。网络化的好处我就不多说了,你懂的!
开始正题吧:
由于刚刚学习网络编程,暂时是用socket来进行的。不知道大家对端口号这个东西了解不?如果不了解,可以去查看计算机网络这本书,讲得很详细。这里稍微讲一下,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等,小于1024的端口号一般作为常用的服务器端口,大多数TCP/IP实现给临时端口号分配1024---5000之间的端口号。大于5000的端口号是为其他服务器预留的。如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。
好吧,了解了端口就用它来干点事吧!
首先我们把服务器端的程序做好,代码暂时先贴出来
package Netsever;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import java.nio.Buffer;
public class Netsever1 {
Netsever1()
{
try {
ServerSocket ss=new ServerSocket(8888);//建一个端口号为8888的服务器socket
Socket s=new Socket();
System.out.println("等待连接");
s=ss.accept();//让他处于监听的状态,监听来来连接的程序
System.out.println("连接成功");
InputStreamReader isr=new InputStreamReader(s.getInputStream());//获取并接受socket中的流
BufferedReader br=new BufferedReader(isr);
String str= br.readLine();//读取数据
System.out.println(str);
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//创建一个输出的流
pw.println("你好呀!客户端。。。。");
//输出我们想要输出的
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Netsever1 ns=new Netsever1();
}
}
他的初始状态是:
接下来把客户端写好吧!不能让他一直等着。
package Client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
public class Netclient {
Netclient()
{
try {
Socket s=new Socket("192.168.1.4",8888);//ip地址是我自己的,因为服务器也在我机器上,如果是别的机器,就写别的IP
System.out.println("连接");
//输出流
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//后面跟服务器端是差不多的。
pw.println("hello ,我是小牛毛");
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
String str= br.readLine();
System.out.println(str);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Netclient nc=new Netclient();
}
}
客户端暂时就写着么多了,下面我们就运行一下,看他是否能够连接上:
看来连接是成功了,接收到了服务器端发来的信息。
下面再看看服务器端发生了什么情况:
服务器端也收到了客户发来的消息。
看来是ok了。
下面是我做的一个小练习,山寨版的QQ.代码就不贴了,贴个图看看吧!
下面是他们的聊天,很火热哦!