/******* 服务器程序 (server.c) ************/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
int
main (int argc, char *argv[])
{
int sockfd, new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size, portnumber;
char hello[] = "Hello! Are You Fine?\n";
if (argc != 2)
{
fprintf (stderr, "Usage:%s portnumber\a\n", argv[0]);
exit (1);
}
if ((portnumber = atoi (argv[1])) < 0)
{
fprintf (stderr, "Usage:%s portnumber\a\n", argv[0]);
exit (1);
}
/* 服务器端开始建立socket描述符 */
if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
fprintf (stderr, "Socket error:%s\n\a", strerror (errno));
exit (1);
}
/* 服务器端填充 sockaddr结构 */
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 (portnumber);
/* 捆绑sockfd描述符 */
if (bind
(sockfd, (struct sockaddr *) (&server_addr),
sizeof (struct sockaddr)) ==
-1)
{
fprintf (stderr, "Bind error:%s\n\a", strerror (errno));
exit (1);
}
/* 监听sockfd描述符 */
if (listen (sockfd, 5) == -1)
{
fprintf (stderr, "Listen error:%s\n\a", strerror (errno));
exit (1);
}
while (1)
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size = sizeof (struct sockaddr_in);
if ((new_fd =
accept (sockfd, (struct sockaddr *) (&client_addr),
&sin_size)) == -1)
{
fprintf (stderr, "Accept error:%s\n\a", strerror (errno));
exit (1);
}
fprintf (stderr, "Server get connection from %s\n",
inet_ntoa (client_addr.sin_addr));
if (write (new_fd, hello, strlen (hello)) == -1)
{
fprintf (stderr, "Write Error:%s\n", strerror (errno));
exit (1);
}
/* 这个通讯已经结束 */
close (new_fd);
/* 循环下一个 */
}
close (sockfd);
exit (0);
}
/******* 客户端程序 client.c ************/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
int
main (int argc, char *argv[])
{
int sockfd;
char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *host;
int portnumber, nbytes;
if (argc != 3)
{
fprintf (stderr, "Usage:%s hostname portnumber\a\n", argv[0]);
exit (1);
}
if ((host = gethostbyname (argv[1])) == NULL)
{
fprintf (stderr, "Gethostname error\n");
exit (1);
}
if ((portnumber = atoi (argv[2])) < 0)
{
fprintf (stderr, "Usage:%s hostname portnumber\a\n", argv[0]);
exit (1);
}
/* 客户程序开始建立 sockfd描述符 */
if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
fprintf (stderr, "Socket Error:%s\a\n", strerror (errno));
exit (1);
}
/* 客户程序填充服务端的资料 */
bzero (&server_addr, sizeof (server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons (portnumber);
server_addr.sin_addr = *((struct in_addr *) host->h_addr);
/* 客户程序发起连接请求 */
if (connect
(sockfd, (struct sockaddr *) (&server_addr),
sizeof (struct sockaddr)
) == -1)
{
fprintf (stderr, "Connect Error:%s\a\n", strerror (errno));
exit (1);
}
/* 连接成功了 */
if ((nbytes = read (sockfd, buffer, 1024)) == -1)
{
fprintf (stderr, "Read Error:%s\n", strerror (errno));
exit (1);
}
buffer[nbytes] = '\0';
printf ("I have received:%s\n", buffer);
/* 结束通讯 */
close (sockfd);
exit (0);
}
分享到:
相关推荐
一个开源的高性能IOCP(完成端口)网络通信封装框架《HP-Socket》的使用实例,官方的DEMO只有MFC对话框的版本,对于刚接触这个框架的新手不太容易把代码移植到自己的项目。 此DEMO使用标准C++控制台来实现,对于刚...
windows客户端,服务器程序和linux下客户端,服务器程序。一共四个经典程序并有详细的注释。细细的阅读,一定会有收获。
1. 包含两个例子本人在comsenseEXP上运行过木有问题。 2. 例子syn是采用阻塞模式做的 3. 例子select是采用select(非阻塞模式)做的。 运行方法: a.安装comsenseEXP,配置windows上php环境变量(目的是使得win...
sokect通信程序c# 一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。
利用C语言用socket请求网页,GET百度首页,接收返回数据
本书范例丰富,且具有代表性,如Socket编程、客户/服务端编程、多线程开发、CGI编程、X Windows下的Motif编程等。读者直接或只需稍作修改就可以将它们应用到自己的应用程序开发中。这些范例的源代码可以从配套光盘的...
摘要:VC/C++源码,数据库应用,Socket ...VC++ MFC Socket编程例子,C/S结构的程序,分客户端和服务端,Server端又分两个版本:一个是MFC,一个是SDK版本,VC6.0环境下可顺利编译。 运行环境:Windows/Visual C/C++
一个简单的socket网络编程例子: 服务器代码: #include <winsock2.h> #include <iostream> #include <stdio.h> #include <windows.h> #pragma comment(lib,"ws2_32.lib") //这句话的意思是加载ws2_32.lib这个...
C、本例子中,还实现了另外一个功能,就是ios程序与PC程序进行socket。当然是最为简单的。 ---------------- 由于本人也是刚刚使用c#开发ios程序,初入门,为了这两个问题,也是研究了很久,可查的资料又很少。 ...
参考了周立发的例子和HTTP协议详解 用C语言编写的一个HTTP下载库,还带了一个...因为公司的环境是ubuntu,所以目前还没来得及写windows的版本,但留了跨平台接口,只需加些widnows头文件和Windows的socket初始化即可。
可以作为socket编程的一个例子来学习。 [2. 文件介绍] 程序中使用socket实现了文件的传输。 在VC6.0中编译通过,目录中olfile.cpp/olfile.h是原文件,可以任意修改,不过请不要改动文件头的作者信息。 有两个...
HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。 [15:47 2018/11/05] 同步更新到5.4.2正式版 [10:37 2018/10/23] 1、英文模块IHttpSyncClient组件大改 2、IWinHttp组件添加若干命令(PS:忘记是哪些了。...
使用epoll实现io复用,多个服务器同时与多个客户端连接。
以下是关于socket编程的一个非常经典的例子: 服务端: #include #include <Winsock2> //windows socket的头文件 #pragma comment( lib, "ws2_32.lib" )// 链接Winsock2.h的静态库文件 void main() { //...
通过Android手机去关闭电脑,...在学习的过程中发现,关于C语言与java通过socket通信这方面比较少入门级的简单易懂的例子,在C的cpp里面写了一下一些学到的东西,不足之处望指导。java实现socket比较简单,就不写了。
10.1.2 从socket到Windows内核 297 10.1.3 TDI过滤的代码例子 299 10.2 TDI的过滤框架 299 10.2.1 绑定TDI的设备 299 10.2.2 唯一的分发函数 300 10.2.3 过滤框架的实现 302 10.2.4 主要过滤的请求类型 304 10.3 ...
14.1.2 从socket到Windows内核 318 14.1.3 TDI过滤的代码例子 319 14.2 TDI的过滤框架 319 14.2.1 绑定TDI的设备 319 14.2.2 唯一的分发函数 320 14.2.3 过滤框架的实现 322 14.2.4 主要过滤的请求类型 323 ...
CAsyncSocket类在较低层次上封装了Windows Socket API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows Socket API默认情况下工作在阻塞模式,不方便直接在消息驱动的Windows程序上使用)...
10.1.2 从socket到Windows内核 297 10.1.3 TDI过滤的代码例子 299 10.2 TDI的过滤框架 299 10.2.1 绑定TDI的设备 299 10.2.2 唯一的分发函数 300 10.2.3 过滤框架的实现 302 10.2.4 主要过滤的请求类型 304 10.3 ...
10.1.2 从socket到Windows内核 297 10.1.3 TDI过滤的代码例子 299 10.2 TDI的过滤框架 299 10.2.1 绑定TDI的设备 299 10.2.2 唯一的分发函数 300 10.2.3 过滤框架的实现 302 10.2.4 主要过滤的请求类型 304 10.3 ...