【学习笔记】简单的socket网络编程实例

这篇博客介绍了TCP的三次握手和四次分手过程,并通过实例展示了如何使用C语言进行简单的socket网络编程,包括单向交互套接字和双向自由交互套接字的服务端和客户端实现。
摘要由CSDN通过智能技术生成

TCP的三次握手(图片来自百度百科)


TCP的四次分手(图片来自百度百科)




单向交互套结字

服务端

描述符,sfp接收所有连接请求,然后将每个连接传给对应的一个nfp。类似电话总机与分机。

/* 
* Author:		xusongqi@live.com
* 
* Created Time: 2014年03月19日 星期三 17时29分14秒
* 
* FileName:     sock_server.c
* 
* Description:  
*
*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <linux/in.h>
#include <string.h>
#include <sys/socket.h>

int main(void)
{
	int sfp,nfp;//两个描述符
	struct sockaddr_in server_addr,client_addr;//服务器地址,客户端地址
	int sin_size;//???
	unsigned short portnum = 0x8888;//服务器使用端口

	printf("Here's a socket server\n");
	sfp = socket(AF_INET, SOCK_STREAM,0);
	if(sfp == -1)
	{
		printf("SOCKET FAILED\n");
		exit(1);
	}
	printf("SOCKET SUCCEED\n");

	/*设置监听的端口和IP信息*/
	bzero(&server_addr, sizeof(struct sockaddr_in));
	server_addr.sin_family=AF_INET;
	server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
	server_addr.sin_port=htons(portnum);
	
	/*bind() 端口绑定函数*/
	if(-1 == bind(sfp,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)))
	{
		printf("BIND FAILED\n");
		exit(1);
	}
	printf("BIND SUCCEED\n");
	
	/*listen 监听端口函数*/
	if(-1 == listen(sfp,5))
	{
		printf("LISTEN FAILED\n");
		exit(1);
	}
	printf("LISTEN SUCCEED\n");

	while(1)
	{
		sin_size = sizeof(struct sockaddr_in);
		/*服务端accept函数,调用即进入阻塞状态,等待用户连接。
		 *在没有用户进行连接时,程序停在此处。
		 *此处accpet的第二个参数用于获取客户端的端口和地址信息。
		 */
		nfp = accept(sfp,(struct sockaddr *)(&client_addr),&sin_size);
		if(nfp == -1)
		{
			printf("AC
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值