c语言socket编程

1. [代码][C/C++]代码     
服务端:
//
//  main.m
//  server
//
//  Created by mac on 13-4-15.
//  Copyright (c) 2013年 mac. All rights reserved.
//
 
#import <Foundation/Foundation.h>
#import <sys/types.h>
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
 
int CreateServerSocket(short port)
{
    int socket_server=0;
    socket_server=socket(AF_INET,SOCK_STREAM,0);
    //填充IP与端口
    /*
     struct sockaddr_in {
     __uint8_t  sin_len;
     sa_family_t    sin_family;
     in_port_t  sin_port;
     struct in_addr sin_addr;
     char       sin_zero[8];
     };
     */
    struct sockaddr_in sAddr = {0};
    sAddr.sin_len=sizeof(sAddr);
    sAddr.sin_family=AF_INET;
    sAddr.sin_port= htons(port); //本机字节序转网络字节序
    sAddr.sin_addr.s_addr=INADDR_ANY;
    //绑定  //(struct sockaddr *)&sAddr强转
    if (bind(socket_server, (struct sockaddr *)&sAddr, sizeof(sAddr)) != 0) {
        return 0;
    }
    //监听
    if(listen(socket_server, 100) != 0){
        return 0;
    }
    return socket_server;
}
//接收连接并返回客户端的scoket
int AcceptClientSocket(int ServerSocket)
{
    int ClinetSocket=0;
    struct sockaddr_in cAddr = {0};
    socklen_t len=sizeof(cAddr);
    ClinetSocket = accept(ServerSocket, (struct sockaddr *)&cAddr, &len);
    char * ipaddress=inet_ntoa(cAddr.sin_addr);
    printf("accept--->%s,%d",ipaddress,cAddr.sin_port);
    return ClinetSocket;
}
void Message(int socket)
{
    char send_Message[1024]="hello\n";
    char recv_Message[1024]={0};
    send(socket, send_Message, strlen(send_Message)+1, 0);
    while (1) {
        recv(socket, recv_Message, sizeof(recv_Message), 0);
        printf("<-----%s",recv_Message);
        printf("----->");
        fgets(send_Message, sizeof(send_Message), stdin);
        send(socket,send_Message,strlen(send_Message)+1,0);
    }
}
 
int main(int argc, const char * argv[])
{
    short port=9898;
    if (argc>1) {
        port=(short)atoi(argv[1]);
    }
    int ServerSocket = CreateServerSocket(port);
    if (ServerSocket == 0) {
        printf("Cerate scoket error\n");
        return 0;
    }
    printf("Cerate scoket ok!\n");
     
    while (true)
    {
        int ClinetScoket=AcceptClientSocket(ServerSocket);
        if (ClinetScoket == 0)
        {http://www.enterdesk.com/special/shouhui/
            printf("Client connect error\n");
            return 0;
        }手绘图片
        printf("Client connect ok.....\n");
        Message(ClinetScoket);
        return 0;
    }
         
//    //接收连接
////    accept(<#int#>, <#struct sockaddr *restrict#>, <#socklen_t *restrict#>)
//    struct sockaddr sAdd2={0};
//    socklen_t len=sizeof(struct sockaddr);
//    accept(ServerSocket, &sAdd2, &len);
     
    return 0;
}
 
 
 
客户端:
//
//  main.m
//  client
//
//  Created by mac on 13-4-15.
//  Copyright (c) 2013年 mac. All rights reserved.
//
 
#import <Foundation/Foundation.h>
#import <sys/types.h>
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
 
int CreateClinetSocket()
{
    int ClinetSocket = 0;
    ClinetSocket = socket(AF_INET, SOCK_STREAM, 0);
    return ClinetSocket;
}
int ConnectionToServer(int client_socket,const char * server_ip,unsigned short port)
{
    struct sockaddr_in sAddr={0};
    sAddr.sin_len=sizeof(sAddr);
    sAddr.sin_family=AF_INET;
    inet_aton(server_ip, &sAddr.sin_addr);
    sAddr.sin_port=htons(port);
    if (connect(client_socket, (struct sockaddr *)&sAddr, sizeof(sAddr))==0) {
        return client_socket;
    }
    return 0;
}
//client
void Message(int socket)
{
    char send_Message[1024]="0";
    char recv_Message[1024]={0};
    while (1) {
        recv(socket, recv_Message, sizeof(recv_Message), 0);
        printf("<-----%s",recv_Message);
        printf("----->");
        fgets(send_Message, sizeof(send_Message), stdin);
        send(socket,send_Message,strlen(send_Message)+1,0);
    }
}
int main(int argc, const char * argv[])
{
    const char * server_ip="127.0.0.1";
    short server_port=9898;
    if (argc>1) {
        server_ip = argv[1];
    }
    if (argc>2) {
        server_port=(short)atoi(argv[2]);
    }
     
    int client_socket= CreateClinetSocket();
    if (ConnectionToServer(client_socket,server_ip, server_port)==0) {
        printf("Connect to server error\n");
        return 0;
    }
    printf("Connect to server ok\n");
    Message(client_socket);
     
    return 0;
}

时间: 2024-10-01 13:36:26

c语言socket编程的相关文章

计算机网络|C语言Socket编程,实现两个程序间的通信

C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图?? 服务端server 服务端需要 "两个"套接字 : 1.服务端套接字serverSocket 2.客户端connect连接请求时,发来的套接字clientSocket 按流程图来看, server服务端主要就是实现下面几个步骤: 0.WSAStartup初始化 //这个东西也不知道是什么鬼,反正就是要初始化一下,

C语言SOCKET编程指南

1.介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了.如果你了解 C语言并想穿过网络编程的沼泽,那么你来对地方了. 2.读者对象 这个文档是一个指南,而不是参考书.如果你刚开始 socket 编程并想找一本入门书,那么你是我的读者.但这不是一本完全的 socket 编程书. 3.平台和编译器

多种语言socket编程集锦—win32

原文 http://www.blogjava.net/huyi2006/articles/263831.html 借此地方整理以下socket编程的多种语言的实现,socket可以跨平台的通信,因此多语言.多平台下的实现有必要了解的.代码都是源自网上,感谢网友的分享. socket编程在windows下的C语言实现,dev C++下编译通过编译时设置编译选项 工具-->编译选项-->编译器,勾选在连接器命令行加入以下命令,在对话框中填-lwsock32//server.c#include &l

C语言Socket编程(计算机网络作业)

最近我计算机网络课程要做作业了,没办法跟着老师一步一步的写C语言的代码,使用的计算就是Socket通信发送消息:代码实现的功能很简单,客户端向服务器端发送消息,服务器端接收客户端发来的消息,并且输出显示到屏幕上:代码中的每个方法的返回值都应该做判断出错情况,以保证程序的稳定性,这里只是测试代码. 老师是录制的视频讲解的,其他其中使用的到的方法要求我们自己去查相关的MSDN资料库,如果有不懂的,就自己上网查. 服务器端接收代码: #include <Winsock2.h>#pragma comm

C语言socket编程——linux环境

先写一个服务器端的监听程序,功能室从客户端读取字符,接收到后告知客户端"I got your message: "+收到的消息:server.c ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Go语言系列(九)- Socket编程和Redis

Socket编程 一.socket编程概述 什么是socket编程? socket编程是计算机PC机器上2个程序通过一个双向的通信连接实现数据的交互,这个连接的一端就是一个socket.socket的翻译意思上还有个插座的概念,其实,也可以很形象的比喻为插座插上去了就有通电了(网络通了).socket编程其实作为UNIX系统的进程间通信机制,通常称为“套接字”,用来描述IP地址和端口的集合,在unix系统下是一个通信的句柄(文件描述符,因为UNIX下所有都是文件). UNIX socket编程的

Go语言之Go语言网络编程

GO 语言网络编程 Go 语言Socket编程 TCP Socket Go语言的 net 包中有一个 TCPConn 类型,可以用来建立 TCP 客户端和 TCP 服务器端间的通信通道,TCPConn 类型里有两个主要的函数: func (c *TCPConn) Write(b []byte) (n int, err os.Error) func (c *TCPConn) Read(b []byte) (n int, err os.Error) CPConn 可以用在客户端和服务器端来读写数据.

winsock教程- windows下的socket编程(c语言实现)

winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程 这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下代码片段只能运行在windows下.windows API中的socket编程部分叫做winsock. 你电脑上做出的任何网络通信背后基本上都有socket,它是一个网络的基本组成部分.举个例子说当你在浏览器键入www.google.com的时候,socket连接到google.com并且取回那个页面然后才

Go语言TCP Socket编程

Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是"高频+刚需",而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的. 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,s