Socket网络编程

来源:互联网 发布:微信里的淘宝链接 编辑:程序博客网 时间:2024/05/22 12:57

     今天来说说网络编程,有关Socket的网络编程,几乎所有的网络编程都要用到Socket,所以网络编程又可以叫做Socket编程。

     什么是socket ?

      socket又叫做套接字(由端口号和ip地址组合的网络套接字),应用程序通常通过套接字向网络发出请求或者应答网络请求。

      Socket特点:1、基于TCP的链接,数据传输有保障。 2、适用建立长时间链接。3、通常应用于即是通讯。

    Socket链接的建立的过程:

    1、服务器的监听

    2、客户端发出请求

    3、建立连接

    4、通信

     下面我就先贴出一个简单的客户端与服务器的连接,代码中都有详细的注释

   服务端:

package com.zking.tcp;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) { try { //创建服务器,指点端口 ScoketServer,端口最好都使用1024以上的ServerSocket server=new ServerSocket(9999);  //接收客户端连接,阻塞式Socket client=server.accept();System.out.println("创建客户端连接");//发送数据String str="你好吗";//输出流/*BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));bw.write(str);bw.newLine();bw.flush();*/DataOutputStream ds=new DataOutputStream(client.getOutputStream());ds.writeUTF(str);ds.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

    客户端:

package com.zking.tcp;import java.io.DataInputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class Client {  public static void main(String[] args) {try { //创建客户端:必须指定服务器+端口,此时就在连接,Socket socket=new Socket("localhost",9999); //接收数据,第一种方法 //括号的里面的是将字节流转换为字符流,有利于提高读的速度。 /*BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));String str=br.readLine();System.out.println(str);*///第二种方法利用DataInputStreamDataInputStream da=new DataInputStream(socket.getInputStream());String str=da.readUTF();System.out.println(str);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

这是最简单的客户端以及服务端的单个的一对一的连接,如若想要实现服务器对多个客户端,可以使用线程,此处就不贴代码了。

下面在写一个从客户端发送文件给服务器,服务器保存到本地,并返回信息给客户端的例子

package com.zking.tcp;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.net.UnknownHostException;import org.junit.Test;public class imagesend {//从客户端发送文件给服务器,服务器保存到本地,并返回信息给客户端@Testpublic void client(){try {//创建socketSocket socketclient=new Socket(InetAddress.getByName("127.0.0.1"),9898);//从本地获取一个文件发送给服务器OutputStream osl=socketclient.getOutputStream();FileInputStream fisclient=new FileInputStream(new File("F:\\图片\\33.jpg"));byte[] b=new byte[1024];int len;while((len=fisclient.read(b))!=-1){osl.write(b,0,len);} socketclient.shutdownOutput();//执行此段,服务端就有返回//接受来自服务器的信息InputStream is=socketclient.getInputStream();byte[] b2=new byte[1024];int len2;while((len2=is.read(b2))!=-1){System.out.println(44+new String(b,0,len2));}is.close();//关闭流} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Testpublic void server(){try {//创建ServerSocketServerSocket serverSocket = new ServerSocket(9898);//调用阻塞Socket socket=serverSocket.accept();//将客户端发送的信息保存到服务器的本地InputStream is=socket.getInputStream();FileOutputStream fos=new FileOutputStream(new File("F:\\图片\\444.jpg"));byte bs[]=new byte[1024];int lens;while((lens=is.read(bs))!=-1){fos.write(bs, 0, lens);}System.out.println("45已经成功接收到来自于"+socket.getInetAddress().getHostAddress());//把成功的信息返回给客户端OutputStream os=socket.getOutputStream();os.write("2323告诉客户端:发送的图片已经接收到".getBytes());//关闭所有的流,从下往上关os.close();fos.close();is.close();socket.close();serverSocket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

在此处,需要复制的文件最好指明具体路径,以免报出Connection reset的错误,拒绝连接。 

好啦,今天就这些,一些基本的核心的Socket编程代码,借此就可以扩展其余的了,希望这些可以帮助初学网络编程的你!大笑

    


1 0
原创粉丝点击