黑马程序员技术交流社区
标题:
什么是Socket通信机制,客户端如何与服务器进行连接?
[打印本页]
作者:
陆建平
时间:
2012-5-31 08:11
标题:
什么是Socket通信机制,客户端如何与服务器进行连接?
什么是Socket通信机制,客户端如何与服务器进行连接?
作者:
张文强
时间:
2012-5-31 08:29
Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.
作者:
古银平
时间:
2012-5-31 08:33
Socket套接字起源于美国泊克利大学。方便了开发网络应用程序。TCP面向连接的可靠传输协议具有数据确认和数据重传机制,保证了发送数据一定能到达通信的对方,一般在对数据完整性要求比较高的场合使用。 UPD协议是无连接,不可靠的传输协议,不具有数据确认和数据重传机制,一般在对数据完整性要求比较低的场合使用。 IP 网络中每台主机都必须有一个惟一IP地址,IP地址是个逻辑地址.因特网上的IP地址具有全球惟一性,32位,4个字节,常用点分十进制的格式表示。
socket是套接字的意思,一般用来描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。 socket非常类似于电话插座,以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。抽象出来,socket实质上提供了进程通信的端点,进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的,正如打电话之前,双方必须各自拥有一台电话机一样。
作者:
刘伯阳
时间:
2012-5-31 09:26
所谓socket,我们理解为“插座”。服务器端一“插”,客户端一“插”,即实现了通信的通路,那么如何形成链接呢?
客户端:
Socket s = null;
try {
s = new Socket("127.0.0.1",8555); //参数内是所连接服务器端的IP地址和接口,服务器端会有进程在这个端口上进行监听
System.out.println("connected!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
服务器端:
try {
ServerSocket ss = new ServerSocket(8555);//这里与客户端申请的接口必须一致
while(true){
Socket s = ss.accept();//接受客户端申请的连接
System.out.println("a client connected!");
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
System.out.println(str);
dis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
作者:
凡延海
时间:
2012-5-31 10:28
嗯,Socket通信机制中,在客户端是Socket 在服务器端有ServerSocket通过监听等待有请求就生成一个Socket。Socket就像码头一样发送数据,从客户端Socket到服务器端Socket,从服务器端到客户端,通过InputStream与OutputStream流来沟通。
public class SocketClient {
public static void main(String[] args) {
try
{
Socket s=new Socket("127.0.0.1",8001);
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader brNet=new BufferedReader(new InputStreamReader(ips));
System.out.println(brNet.readLine());//打印从服务器传来的字符串
PrintWriter pw=new PrintWriter(ops,true);
BufferedReader brkey=new BufferedReader(new InputStreamReader(System.in));
//包装从键盘输入的字符流
while(true)
{
String strWord=brkey.readLine();
pw.println(strWord);
if(strWord.equals("quit"))
{
break;
}
System.out.println(brNet.readLine());
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public class SocketServer {
public static void main(String [] args)
{
boolean running=true;
ServerSocket serversocket;//建立服务器端引用
try
{
serversocket=new ServerSocket(8001);//指定服务器端监听端口号
while(running)
{
Socket socket=serversocket.accept();//一直监听连接请求
InputStream is=socket.getInputStream();//获得输入流
OutputStream os=socket.getOutputStream();//获得输出流
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//包装输入流
PrintWriter pw=new PrintWriter(os);//包装输出流
pw.println("连接成功");
}
serversocket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
复制代码
作者:
黑马11期李项京
时间:
2012-5-31 10:49
额,是不是没看视频,老师讲的肯定比我们哪个讲的都详细啊!看了不懂,再交流啊
作者:
ljh11849
时间:
2012-5-31 10:55
Java语言里面,基于 TCP 协议实现网络通信的类有两个:在客户端的 Socket 类和在 服务器端的 ServerSocket 类。 在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket 实例。在客户端通过规定一个主机和端口号创建一个 socket 实例,连到服务器上。 ServerSocket 类的 accept 方法接受来自Client端的请求信息。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2