软件编程和网络编程有什么区别和联系?
软件开发是开发应用软件或系统软件,当然,目前来看基本上绝大部分都是应用软件。 网络编程,是指在软件开发的过程当中,运用网络编程,以便达到让软件可以在网络上通信的目的。 比如QQ。我们开发QQ这个软件的时候,如果不加入网络编程,那么QQ就不能跟别人说话,而只能自己看。 网络编程一般情况下会带有一个服务器端,一个客户端。而不论服务器端还是客户端,都是软件,也就是说其开发过程都可以说是软件开发。 还有一个例子就像是网络游戏和不带局域网的单机游戏那样。 网络游戏和带局域网的单机游戏应用了网络编程的软件开发。而单机游戏是没有运用网络编程的软件开发。
客户端
import javaioBufferedReader;
import javaioIOException;
import javaioInputStream;
import javaioInputStreamReader;
import javaioOutputStream;
import javaioPrintWriter;
import javanetSocket;
import javanetUnknownHostException;
public class EchoClient {
private String host = "localhost";
private int port = 5000;
private Socket socket = null;
public EchoClient() throws UnknownHostException, IOException {
socket = new Socket(host, port);
}
public static void main(String g[]) throws UnknownHostException,
IOException {
new EchoClient()talk();
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socketgetOutputStream(); // 首先从socket对象中获得输出的空间,即输出流,
// 再传到PrintWriter类中。
return new PrintWriter(socketOut, true); // 创建PrintWriter类,参数一:输出流,
// 参数二:为boolean值,true表示每写一行,PrintWrinter缓存就自动溢出,把数据写到目的地
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socketgetInputStream();// 首先从socket对象中获得输入流,再传到InputStreamReader类中。
return new BufferedReader(new InputStreamReader(socketIn));// 创建BufferedReader类,参数为InputStreamReader的对象
}
public void talk() {
BufferedReader br;
try {
br = getReader(socket);
PrintWriter pw = getWriter(socket);
BufferedReader localReader = new BufferedReader(
new InputStreamReader(Systemin));//在控制台中输入
String msg = null;
while ((msg = localReaderreadLine()) != null) {
pwprintln("Client:"+msg);
Systemoutprintln(brreadLine());
if (msgequals("bye")) {
break;
}
}
} catch (IOException e) {
eprintStackTrace();
} finally {
try {
socketclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
------------------------------------------------------------------
服务端
import javaioBufferedReader;
import javaioIOException;
import javaioInputStream;
import javaioInputStreamReader;
import javaioOutputStream;
import javaioPrintWriter;
import javanetServerSocket;
import javanetSocket;
public class EchoServer {
private int port = 5000; // 端口
private ServerSocket serverSoket = null; // 创建一个服务器
public EchoServer() throws IOException {
serverSoket = new ServerSocket(port); // 实例化服务器,注意:记得输入端口号
Systemoutprintln("服务器启动");
}
public String echo(String msg) {
return "echo:" + msg;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socketgetOutputStream(); // 首先从socket对象中获得输出的空间,即输出流,
// 再传到PrintWriter类中。
return new PrintWriter(socketOut, true); // 创建PrintWriter类,参数一:输出流,
// 参数二:为boolean值,true表示每写一行,PrintWrinter缓存就自动溢出,把数据写到目的地
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socketgetInputStream();// 首先从socket对象中获得输入流,再传到InputStreamReader类中。
return new BufferedReader(new InputStreamReader(socketIn));// 创建BufferedReader类,参数为InputStreamReader的对象
}
public void service() {
while (true) {
Socket socket = null; // 创建一个客户端
try {
Systemoutprintln("获得连接之前");
socket = serverSoketaccept(); // 等待客户连接,accept()将返回一个socket对象,即客户连接者。
Systemoutprintln("获得连接之后");
Systemoutprintln("New connection accepted"
+ socketgetInetAddress() + ":" + socketgetPort());
BufferedReader br = getReader(socket);// 创建BufferedReader的对象并实例化
PrintWriter pw = getWriter(socket); // 创建PrintWriter的对象并实例化
String msg = null;
while ((msg = brreadLine()) != null) {//brreadLine(),本次中只能读一次。
Systemoutprintln(msg);
if (msgequals("bye")) { //如果为bye那么就退出
break;
}
BufferedReader tempbr = new BufferedReader(
new InputStreamReader(Systemin));//在控制台中输出
String tempS = tempbrreadLine();
if (tempSequals("bye")) { //如果为bye那么就退出
break;
}
pwprintln("Server:"+tempS); // 将所要回复的信息写到socket对象输出流中。
}
} catch (IOException e) {
eprintStackTrace();
} finally {
if (socket != null) {
try {
socketclose();//关闭客户端
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
}
public static void main(String[] g) throws IOException {
new EchoServer()service();
}
}
写个简单点的服务器跟客服端就行了我写了个很简单的,只能在一个客户端跟一个服务器通信,在控制台输入下面这个是服务器import javaio;
import javanet;
import javautilScanner;public class Server
{
public static void main(String[] args)
{
try {
ServerSocket server=new ServerSocket(8888);//定义客户端的端口号
Socket client=serveraccept();//定义一个Socket对象
InputStream is=clientgetInputStream();//服务器接受信息输入流,也就是接受从服务器段发送过来的消息
BufferedReader br=new BufferedReader(new InputStreamReader(is));//用bufferedreader包装下输入流
OutputStream os=clientgetOutputStream();//这是用来给服务器发送消息的输出流
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(Systemin);//从键盘输入字符串
boolean flag=true;//定义一个死循环,让服务器不停的接受从客户端发送来的字符串
while(flag)
{
String s=brreadLine();//s是从客户端接受到得字符串
Systemoutprintln(s);
String s2=scannernextLine();//s2是写给客户端的字符串
psprintln(s2); //给客户端发送你写的东西
}
clientclose();
} catch (IOException e) {//try 跟catch你不用管,这是用来处理异常的,就是固定格式
eprintStackTrace();
}
}
} 下面是客户端import javaio;
import javanet;
import javautilScanner;public class Client
{ public static void main(String[] args)
{
try
{
Socket client=new Socket("192168----",8888);//IP地址是个字符串,端口号是个整数,这个端口号要跟前面你写的那个一样,还有IP地址,写你的机器的IP地址
InputStream is=clientgetInputStream();//这边的两个流跟上面服务器的差不多的作用
BufferedReader bf=new BufferedReader(new InputStreamReader(is));
OutputStream os=clientgetOutputStream();
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(Systemin);
boolean flag=true;
while(flag)//这句话可以让客户端不停的说话
{
String s2=scannernextLine();
psprintln(s2);
String s=bfreadLine();
Systemoutprintln(s); }
clientclose();
}
catch (UnknownHostException e)
{
eprintStackTrace();
}
catch (IOException e)
{
eprintStackTrace();
} }}
网络编程就是使用IP地址,或域名,和端口连接到另一台计算机上对应的程序,按照规定的协议(数据格式)来交换数据。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。
中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分都要接触。
我觉得你和我情况差不多,我是这样练出来的
0条评论