#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h> typedef struct sockaddr SA; int open_clientfd(char* hostname,int port)
{
int clientfd;
struct hostent * hp;
struct sockaddr_in serveraddr;
char* msg; /*创建socket*/
if((clientfd=socket(AF_INET,SOCK_STREAM,))<)
{
msg="client socket() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="client socket() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); /*填写server的ip地址和port*/
if((hp=gethostbyname(hostname))==NULL)
{
msg="client gethostbyname() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="client gethostbyname() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); bzero((char*)&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(port);
bcopy((char*)hp->h_addr_list[],(char*)&serveraddr.sin_addr.s_addr,hp->h_length); /*建立连接*/
if(connect(clientfd,(SA*)&serveraddr,sizeof(serveraddr))<)
{
msg="client connect() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="client connect() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); return clientfd;
} int open_listenfd(int port)
{
int listenfd,optval;
struct sockaddr_in serveraddr;
char* msg; /*创建socket*/
if((listenfd=socket(AF_INET,SOCK_STREAM,))<)
{
msg="server socket() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="server socket() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); /*配置服务器使得它能被立即终止和重启*/
if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,(const void *)&optval,sizeof(int))<)
{
msg="server setsockopt() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="server setsockopt() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); /*绑定服务端的ip和端口*/
bzero((char*)&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons((unsigned short)port);
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(listenfd,(SA*)&serveraddr,sizeof(serveraddr))<)
{
msg="server bind() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="server bind() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); /*创建listen*/
if(listen(listenfd,)<)
{
msg="server listen() error!\n";
write(STDOUT_FILENO,msg,strlen(msg));
return -;
}
msg="server listen() success!\n";
write(STDOUT_FILENO,msg,strlen(msg)); return listenfd;
}

open_clientfd(char* hostname,int port)和open_listenfd(int port)的更多相关文章

  1. java.lang基础数据类型boolean、char、byte、short、int、long、float、double (JDK1.8)

    java.lang.Boolean public static int hashCode(boolean value) { return value ? 1231 : 1237; } JDK 1.8新 ...

  2. const int * p 和 int const * p 和 int * const p 的区别

    首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * ...

  3. C++中int *p[4]和 int (*q)[4]的区别

    这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组.后: 数组指针;可以直 ...

  4. C++中(int&)和(int)的区别

    在说这个问题之前,先说两个需要知道的背景知识: (1)语言的类型的强制转换不会修改原来的数据,会另外的开辟一个临时的或者程序中指定的空间来存储强制转换后的值. (2)C++引用的实现是在符号表中动了手 ...

  5. 将int转int数组并将int数组元素处理后转int,实现加密

    package faceobject; import java.util.Arrays; public class Test { /** 加密问题 数据是小于8位的整数 先将数据倒序,然后将每位数字都 ...

  6. signal函数理解或者void (*signal(int signum,void(*handler)(int)))(int)理解

    把void (*signal(int signum,void(*handler)(int)))(int)分成两部分: typedef void (*sighandler_t)(int); sighan ...

  7. C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);

    问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,&l ...

  8. 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud

    package zuoye; public class student { int age; String name; int stuNO; void outPut() { System.out.pr ...

  9. (int &)a 和(int)a

      [cpp] view plain copy float a = 1.0f;     cout < < (int)a < < endl;     cout < < ...

随机推荐

  1. cocos2d(3.0)一些基础的东西

    1.创建项目后环境配置: 附加文件夹:加入 $(EngineRoot) $(EngineRoot)cocos $(EngineRoot)cocos\editor-support $(EngineRoo ...

  2. JAVA数组的定义及用法

    数组是有序数据的集合,数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素. 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; ...

  3. mha 自动failover 原创

    自动failover slave1:stop slave io_thread slave2stop slave io_thread server1:   create database sbtest; ...

  4. xcode笔记

    1.Alt键的使用   2.设置捕捉所有意外断点:停在代码出错处     2015年07月27日09:52:12 3.搜索 command + F:在当前的文件中搜索 command + Shift ...

  5. Kafka分布式消息模型

    Kafka开发的主要初衷目标是构建一个用来处理海量日志,用户行为和网站运营统计等的数据处理框架.在结合了数据挖掘,行为分析,运营监控等需求的情况下,需要能够满足各种实时在线和批量离线处理应用场合对低延 ...

  6. 基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本

    一.操作日期选择框 QQ图片20161118215530.png1336x545 22.6 KB 说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium ...

  7. Asp_CRUD

    Asp_增删改查.逻辑流程 启动服务器. 地址为127.0.0.1 端口为随机分配 2607 然后在浏览器中输入http://localhost:2670/CRUD_main.ashx 浏览器像服务器 ...

  8. 关于IOS的蓝牙(转)

    关于IOS的蓝牙 首先,你要了解你的目的是什么,一般的IOS蓝牙开发有以下三种目的: 1. IOS设备和IOS设备之间交互 好消息是:ios6.0可以把iPhone手机当从设备了,可以两台iPhone ...

  9. sql还原数据库时候,遇到数据库被占用的解决情况

    最近上班时候,经常要做数据库还原,时常遇到数据被占用的情况, 执行一句sql语句就可以解决, ALTER DATABASE dbname SET OFFLINE WITH ROLLBACK IMMED ...

  10. 几个简单的Makefile

    http://www.blogjava.net/canvas/articles/quick_makefile.html 几个简单适合小程序的Makefile,可直接拷贝使用,自己mark一下,这样长时 ...