C语言Socket网络编程实例

转自:http://www.cnblogs.com/huxc/p/4272940.html

服务端:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib") 

/*
TCP服务端
*/
int main(void)
{
	int len = 0;
	WSADATA         wd;
	int ret = 0;
	SOCKET s, c;
	char sendBuf[1000] = "", recvBuf[1000] = "";
	SOCKADDR_IN saddr, caddr;
	ret = WSAStartup(MAKEWORD(2, 2), &wd);  /*1.初始化操作*/

	if (ret != 0)
	{
		return 0;
	}
	if (HIBYTE(wd.wVersion) != 2 || LOBYTE(wd.wVersion) != 2)
	{
		printf("初始化失败");
		WSACleanup();
		return 1;
	}

	/*2.创建服务端socket*/
	s = socket(AF_INET, SOCK_STREAM, 0);

	/*3.设置服务端信息*/
	saddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	saddr.sin_family = AF_INET; /*协议类型*/
	saddr.sin_port = htons(8888);

	/*4.绑定在本地端口*/
	bind(s, (SOCKADDR *)&saddr, sizeof(SOCKADDR));

	/*5.监听端口*/
	listen(s, 5);

	len = sizeof(SOCKADDR);

	while (1)
	{
		/*6.等待客户端连接,会阻塞在此处,直到有客户端连接到来。*/
		c = accept(s, (SOCKADDR*)&caddr, &len);

		sprintf(sendBuf, "欢迎来到我的第一个socket,您的ip地址为:%s\n", inet_ntoa(caddr.sin_addr));

		/*7.发送数据到客户端*/
		send(c, sendBuf, strlen(sendBuf) + 1, 0);

		/*8.接受客户端的返回*/
		recv(c, recvBuf, 1000, 0);

		/*9.打印出客户端发送来的数据*/
		printf("%s\n", recvBuf);

		/*10.如果不再跟这个客户端联系,就关闭它*/
		closesocket(c);
	}
	/*如果有退出循环的条件,这里还需要清除对socket库的使用*/
	/* WSACleanup();*/
	return 0;
}

  客户端:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")

int main(void)
{
	WSADATA         wd;
	int ret = 0;
	SOCKET c;
	char recvBuf[1000] = "", sendBuf[1000] = "";
	SOCKADDR_IN saddr;
	ret = WSAStartup(MAKEWORD(2, 2), &wd);  /*1.初始化操作*/

	if (ret != 0)
	{
		return 0;
	}

	if (HIBYTE(wd.wVersion) != 2 || LOBYTE(wd.wVersion) != 2)
	{
		printf("初始化失败");
		WSACleanup();
		return 1;
	}

	/*2.创建客户端socket*/
	c = socket(AF_INET, SOCK_STREAM, 0);

	/*3.定义要连接的服务端信息*/
	saddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(8888);

	/*4.连接服务端*/
	connect(c, (SOCKADDR*)&saddr, sizeof(SOCKADDR));
	recv(c, recvBuf, 1000, 0);
	printf("服务端发来的数据:%s\n", recvBuf);

	sprintf(sendBuf, "服务端你好!!!");
	send(c, sendBuf, strlen(sendBuf) + 1, 0);

	closesocket(c);
	WSACleanup();

	getchar();
	return 0;
}

  

时间: 2024-10-12 16:30:48

C语言Socket网络编程实例的相关文章

C# Socket网络编程实例

本文实例讲述了C# Socket网络编程技巧.分享给大家供大家参考.具体分析如下: 客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址,及应用程序所对应的端口号 TCP协议: 安全稳定,一般不会发生数据丢失,但是效率低.利用TCP发生数据一般经过3次握手(所有效率低,自己百度三次握手) UDP协议: 快速,效率高,但是不稳定,容易发生数据丢失(没有经

linux下C语言socket网络编程简例

转自:http://blog.csdn.net/kikilizhm/article/details/7858405 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后打印出来,然后关闭.程序里有详细的说明,其中对具体的结构体和函数的实现可以参考其他资料. 程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的. 移

Python Socket,How to Create Socket Server? - 网络编程实例

文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programing in Python: Part2: Programing sockets servers. 在所有的通信实例中,都分为Client 和Server. 其中:Client是请求的发起点,Server是使用Socket接收传入的值并且提供返回数据. Server的职能如下: 1>.创建/打开一个so

Java基础篇Socket网络编程中的应用实例

说到java网络通讯章节的内容,刚入门的学员可能会感到比较头疼,应为Socket通信中一定会伴随有IO流的操作,当然对IO流比较熟练的哥们会觉得这是比较好玩的一章,因为一切都在他们的掌握之中,这样操作起来就显得非常得心应手,但是对于IO本来就不是多熟悉的哥们来说就有一定的困难了,在搞清楚IO流操作机制的同时还必须会应用到Socket通信中去,否则会对得到的结果感到非常郁闷和懊恼,下面就和大家一起分享一下自己遇到一点小麻烦后的感触以及给出的解决办法. 要求:客户端通过Socket通信技术上传本地一

Socket网络编程(TCP/IP/端口/类)和实例

Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信

因为UNIX和Win的socket大同小异,为了方便和大众化,这里先介绍Winsock编程. socket 网络编程的难点在入门的时候就是对基本函数的了解和使用,因为这些函数的结构往往比较复杂,参数大部分都是结构体,令人难以记忆和理解. 但是一旦我们知道这些函数包括其参数的具体含义,socket网络编程也就变得不是那么复杂.这里不赘述 具体函数的详细含义,网络上有很多的文章,同时笔者建议大家参考 MSDN,对返回值,参数等会有更好的理解. 以下均为单线程的简单实例,多线程的请关注下一篇文章. (

Socket网络编程--网络爬虫(1)

我们这个系列准备讲一下--网络爬虫.网络爬虫是搜索引擎系统中十分重要的组成部分,它负责从互联网中搜集网页,采集信息,这些网页信息用于建立索引从而为搜索引擎提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果.网络爬虫的基本工作原理: (1)从一个初始URL集合中挑选一个URL,下载该URL对应的页面: (2)解析该页面,从该页面中抽取出其包含的URL集合,接下来将抽取的URL集合再添加到初始URL集合中: (3)重复前两个过程,直到爬虫达到某种停止

Linux Socket 网络编程

Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后,过段时间不看,重新拾起这些知识的时候又要从头开始,所以,在这里做个笔记也算是做个模板,以后可以直接从某一个阶段开始接着玩... 1. socket套接字介绍 socket机制其实就是包括socket, bind, listen, connect, accept等函数的方法,其通过指定的函数实现不同