黑马程序员技术交流社区

标题: 关于套接字 [打印本页]

作者: 杨银川    时间: 2011-12-21 21:13
标题: 关于套接字
本帖最后由 杨银川 于 2011-12-21 23:55 编辑

想问一下,有哪位大侠可以形象的给我说说套接字socket啊,看了API文档,感觉还是很抽象,还有我们java有Socket,那么别的呢,听毕老师说在网络编程中很重要,有多重要呢,如果能举几个实例更好了,谢谢
作者: 刘健    时间: 2011-12-21 21:45
套接字在我看来就是路,就像路由高速公路,普通公路一样,套接字也有UDP和TCP,实现的都是网络连接,方式不一样而已
作者: 于汝国    时间: 2011-12-21 22:01
Socket(套接字/插座):
Socket是为网络服务提供的一种机制;通信的两端都有Socket;网络通信其实就是Socket间的通信;数据在两个Socket间通过IO传输。 (可以把Socket理解为码头,由船进行装货卸货来实现码头间数据的传输)。  PS:Socket网络编程主要掌握其流程,代码查文档即可。

同时,在学习网络编程时,必须重点掌握理解两个传输协议:UDP和TCP
UDP(用户数据报协议):将数据及源和目的地址封装成数据包,不需要建立连接(即:面向无连接);每个数据报的大小限制在64k内;因无连接,是不可靠协议;不需要连接地址,速度快。  如:网络聊天、网络视频、桌面共享都可以利用UDP传输
TCP(传输控制协议):建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。  如:电话通话、下载

下面通过代码进行举例说明:
要求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
客户端: 1,建立socket服务,指定要连接主机和端口。
2,获取socket流中的输出流,将数据写到该流中,通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
import java.io.*;
import java.net.*;

class TcpClient2 {
        public static void main(String[] args)throws Exception {
                Socket s = new Socket("localhost",10004);
               
                OutputStream out = s.getOutputStream();
                out.write("服务端,你好".getBytes());       
       
                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));

                s.close();
        }
}

class TcpServer2{
        public static void main(String[] args) throws Exception{
                ServerSocket ss = new ServerSocket(10004);
                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip+"....connected");

                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));

                OutputStream out = s.getOutputStream();
                Thread.sleep(10000);
                out.write("哥们收到,你也好".getBytes());
                s.close();
                ss.close();
        }
}


想了解更多关于Socket网络编程的知识,可以看看毕向东老师关于Java讲解的第23天内容!
希望我的解答能对你有所帮助!


作者: 韩军博    时间: 2011-12-21 22:36
套接字Socket有两部分组成,一部分是IP地址,另一部分是端口号。
两个计算机通信准确的来说是两个计算机的进程进行通信的。
IP地址是用来在网络中找到目的主机的,端口号是用来获取目的主机中相应的进程。
其中的编码中用到的TCP,UDP都是对Socket做了进一步的封装。
如果楼主在大学期间学习过计算机网络这门课程的话,相信你就会很清楚。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2