`
chentingk
  • 浏览: 19036 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

简单的socket通信

 
阅读更多



    这个月公司带领我们学习了socket通信的基本方法。

  我们在局域网(局域网相对于广域网来说的,广域网在广域网下也是一个局域网)里面,是通过什么来识别对方的呢?局域网下我们会被自动分配一个IP地址,而唯一的识别则是MAC地址,每一台机子的MAC地址都是不一样的。通常,我们通过IP地址则可以确定一个局域网内的某台主机,而要访问这台主机,则还需要端口号,即访问一台机器所必备的东西有:局域网IP地址,端口号。

  通信是使用了传输层的TCP/IP协议簇,常用的有TCP/IP协议,UDP协议,SMTP等。

  TCP/IP协议是一种面向连接的,可靠的网络传输协议。TCP/IP协议中拥有流量控制和拥塞控制机制,流量控制是通过滑动窗口实现的,而拥塞控制则是用慢开始,快重传等方式实现。TCP/IP协议的连接通常称为“三次握手”。首先由客户机发送给服务器一个SYN(建立连接的信号),这是第一次握手,然后服务器回传ACK(一个确认信号)+SYN,这是第二次握手,最后客户机再发送一个ACK,完成第三次握手,最后进入连接状态。

  UDP是一种面向无连接的,高效而不可靠的传输协议。客服机只是负责发送数据接收数据,而服务器和客户机之间不存在任何连接形式,类似于发信息,不需要建立连接。

 

TCP程序模式:

 

   UDP程序模式:

 

简单Server程序的实现

 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
              public String readString()
	{
		int i=0;
		String s="";
		StringBuffer stb=new StringBuffer();
		char c=0;
		try{
			while(c!=13)
			{
				i=inpus.read();
				c=(char)i;
				stb.append(c);
			}
			s=stb.toString().trim();
		}catch(Exception e)
		{
			e.printStackTrace();
			
		}
		return s;
		
	}

	
	public void setUpServer(int port)
	{
		
		try {
			
			ServerSocket server=new ServerSocket(port);
			Socket client=server.accept();
			
			
			String info="welcome to check in!\r\nplease input the name!\r\n";

			outpus.write(info.getBytes());
			outpus.flush();
			name=readString();
			String s="";
			while(!s.equals("bye"))
			{
				
				s=readString();
				System.out.println(name+":"+s);
				String getS=name+":"+s+"\r\n";
				outpus.write(getS.getBytes());
			}
			
			client.close();

			
		} catch (IOException e) {
			
			
			e.printStackTrace();
		}
		
	}
}

 程序流程:

  首先建立一个ServerSocket套接字,绑定端口(0-65535)部分端口被本地应用程序占用。然后等待客户端的接入,并得到相对于连入socket的一个输入输出流,Output写入数据到客户机,Input接受数据到服务器。注意:这是个单线程服务器,只能单个socket连入。

 

相对于代码而言,我对机制和算法的兴趣比较大,理论的理解显得更富有激情。

使用telnet客户端进行服务器的测试,今后会自己写client端。

  • 大小: 87.6 KB
  • 大小: 46.5 KB
  • 大小: 60.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics