网络编程实例代码

Makefile:

all:
	gcc -o server server.c -lpthread
	gcc -o client client.c

clean:
	rm server client

server.c:

/*TCP:
  server.c
*/

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>

void *do_work(void *arg);

int main(int argc,char *argv[])
{
    int sockfd;
    int ret;

    /*1.调用socket建立网络套接字*/
    sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sockfd){
        perror("socket server");
        return -1;
    }

    /*2.填充服务器地址和端口号*/
    struct sockaddr_in servaddr;
    memset(&servaddr,0,sizeof(servaddr));
    servaddr.sin_family = AF_INET;        //协议族
    servaddr.sin_port = htons(6775);    //端口号5001-65536
    servaddr.sin_addr.s_addr = inet_addr("192.168.7.223"); //ip地址
    socklen_t alen = sizeof(servaddr);

    /*3.调用bind绑定服务器地址和端口*/
    ret = bind(sockfd,(struct sockaddr *)&servaddr,alen);
    if(-1 == ret){
        perror("bind");
        return -1;
    }

    /*4.调用listen主动监听是否有客户连接*/
    ret = listen(sockfd,10);
    if(-1 == ret){
        perror("listen");
        return -1;
    }
    printf("servet init.d success...\n");

    int newfd = -1;     //新的套接字描述符
    char buf[1024] = {0};
    pthread_t tid;        //新建线程ID

    while(1)
    {
        /*5.调用accept接受客户端连接*/
        newfd = accept(sockfd,NULL,NULL);
        if(newfd <= 0){
            continue;
        }
        printf("==>%d connect success..\n",newfd);

        /*为每个客户开辟一个线程去管理*/
        ret = pthread_create(&tid,NULL,do_work,&newfd);
        if(0 != ret){
            perror("pthread_create failed\n");
            break;
        }
        pthread_detach(tid);//设置为分离态,资源由系统自动回收

    }

    /*7.关闭打开的网络套接字***/
    close(sockfd);
    close(newfd);

    return 0;
}

/*线程执行函数*/
void *do_work(void *arg)
{
    int newfd = *(int *)arg;
    int ret;
    char buf[1024];

    /*6.调用read/write读写网络文件*/
    while(1)
    {
        memset(buf,0,sizeof(buf));
        ret = read(newfd,buf,sizeof(buf)-1);
        if(ret > 0){
            printf("recv data:%s\n",buf);
        }
    }

    pthread_exit(NULL);
}

client.c:

/*TCP:
  client.c
*/

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
    int sockfd;
    int ret;
    char buf[1024] = {0};

    /*1.调用socket建立网络套接字*/
    sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sockfd){
        perror("socket server");
        return -1;
    }

    /*2.填充服务器地址和端口号*/
    struct sockaddr_in servaddr;
    memset(&servaddr,0,sizeof(servaddr));
    servaddr.sin_family = AF_INET;        //协议族
    servaddr.sin_port = htons(6775);    //端口号5001-65536
    servaddr.sin_addr.s_addr = inet_addr("192.168.7.223"); //ip地址
    socklen_t alen = sizeof(servaddr);

    /*3.调用connect连接服务器(根据ip地址和端口去连接)*/
    ret = connect(sockfd,(struct sockaddr *)&servaddr,alen);
    if(-1 == ret){
        perror("connect");
        return -1;
    }
    printf("client connect success...\n");

    /*4.调用read/write读写网络文件*/
    while(1)
    {
        /*从终端获取信息*/
        memset(buf,0,sizeof(buf));
        ret = read(0,buf,sizeof(buf)-1);
        if(ret > 0){

            /*发送给服务器*/
            write(sockfd,buf,ret);
        }
    }

    /*7.关闭打开的网络套接字***/
    close(sockfd);

    return 0;
}
时间: 2024-09-30 14:15:10

网络编程实例代码的相关文章

C# Socket网络编程实例

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

Java学习之网络编程实例

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

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编程实例代码讲解

1.所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 操作java socket时用到的最多的三个方法为: accept():主要用于服务器端产生"阻塞",等待客户端的链接请求,并且返回一个客户端的Socket实例: getInputStream():方法主要用来获得网络连接输入,同时返回一个InputStream对象实例: getOutputStream

Go语言练习:网络编程实例——简易图片上传网站

1.代码结构 2.运行实例 1.代码结构 $ tree . ├── photoweb.go ├── public │   ├── css │   ├── images │   └── js ├── uploads └── views ├── list.html └── upload.html 1.1)photoweb.go 1 package main 2 3 import ( 4 "io" 5 "os" 6 "log" 7 "net/

javascript 仿面向对象编程实例代码(私有,公共变量。。。)

1 //定义一个javascript类 2 function JsClass(privateParam,publicParam){//构造函数 3 var priMember = privateParam; //私有变量 4 this.pubMember = publicParam; //公共变量 5 //定义私有方法 6 function priMethod(){ 7 return "priMethod()"; 8 } 9 //定义特权方法,特权方法可以访问所有成员 10 this.

epoll网络编程实例

在前面已经经过了PPC.TPC.select之类( TPC就是使用进程处理data,TPC就是使用线程处理 ),前面两个的缺点大家应该都是知道的是吧,对于select( 其实poll和他差不多 ),缺点是能同时连接的fd是在是不多,在linux中一般是1024/2048,对于很大的服务器来说是不够的!当然我们可以自己修改其值!但是效率上就会下降! 对于改进poll的epoll来说:支持一个进程打开大数目的socket描述符,也就是说与本机的内存是有关系的!( 一般服务器的都是很大的! ) 下面是

linux网络编程实例

获取服务器时间 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #

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; SOCKE